summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/StaticAnalyzer/Core/DynamicType.cpp3
-rw-r--r--clang/test/Analysis/cast-value-logic.cpp5
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
OpenPOWER on IntegriCloud