diff options
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/DynamicType.cpp | 3 | ||||
-rw-r--r-- | clang/test/Analysis/cast-value-logic.cpp | 5 |
2 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp index a9e281ec9e5..e4ff132c6ed 100644 --- a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp +++ b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp @@ -93,6 +93,9 @@ ProgramStateRef setDynamicTypeAndCastInfo(ProgramStateRef State, QualType CastFromTy, QualType CastToTy, QualType ResultTy, bool CastSucceeds) { + if (!MR) + return State; + if (CastSucceeds) State = State->set<DynamicTypeMap>(MR, ResultTy); diff --git a/clang/test/Analysis/cast-value-logic.cpp b/clang/test/Analysis/cast-value-logic.cpp index e001e4a65e8..0d2255a3aba 100644 --- a/clang/test/Analysis/cast-value-logic.cpp +++ b/clang/test/Analysis/cast-value-logic.cpp @@ -131,3 +131,8 @@ void evalLogic(const Shape *S) { } } // namespace test_get_as +namespace crashes { +void test_non_reference_null_region_crash(Shape s) { + cast<Circle>(s); // no-crash +} +} // namespace crashes |