From: Artem Dergachev Date: Fri, 23 Aug 2019 03:23:55 +0000 (+0000) Subject: [analyzer] DynamicTypeInfo: Avoid putting null regions into dynamic typemap. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9d9dd98628bd31364c0541b994d972de0090356f;p=clang [analyzer] DynamicTypeInfo: Avoid putting null regions into dynamic typemap. Fixes a crash. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@369726 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/DynamicType.cpp b/lib/StaticAnalyzer/Core/DynamicType.cpp index a9e281ec9e..e4ff132c6e 100644 --- a/lib/StaticAnalyzer/Core/DynamicType.cpp +++ b/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(MR, ResultTy); diff --git a/test/Analysis/cast-value-logic.cpp b/test/Analysis/cast-value-logic.cpp index e001e4a65e..0d2255a3ab 100644 --- a/test/Analysis/cast-value-logic.cpp +++ b/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(s); // no-crash +} +} // namespace crashes