From 9d9dd98628bd31364c0541b994d972de0090356f Mon Sep 17 00:00:00 2001 From: Artem Dergachev Date: Fri, 23 Aug 2019 03:23:55 +0000 Subject: [PATCH] [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 --- lib/StaticAnalyzer/Core/DynamicType.cpp | 3 +++ test/Analysis/cast-value-logic.cpp | 5 +++++ 2 files changed, 8 insertions(+) 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 -- 2.50.1