]> granicus.if.org Git - clang/commitdiff
[analyzer] DynamicTypeInfo: Avoid putting null regions into dynamic typemap.
authorArtem Dergachev <artem.dergachev@gmail.com>
Fri, 23 Aug 2019 03:23:55 +0000 (03:23 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Fri, 23 Aug 2019 03:23:55 +0000 (03:23 +0000)
Fixes a crash.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@369726 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/DynamicType.cpp
test/Analysis/cast-value-logic.cpp

index a9e281ec9e58967baeaa2a791b69fe0e67eef98e..e4ff132c6ed9a9af7379e2e446c6b377b4e59e7f 100644 (file)
@@ -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);
 
index e001e4a65e822808012ba91eabbf220b6d34c935..0d2255a3aba2688a28c3dda101fbe612ee015150 100644 (file)
@@ -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