Author: george.karpenkov Date: Thu Mar 1 16:55:59 2018 New Revision: 326520
URL: http://llvm.org/viewvc/llvm-project?rev=326520&view=rev Log: [analyzer] Prevent crashing in NonNullParamChecker https://bugs.llvm.org/show_bug.cgi?id=36381 rdar://37543426 Turns out, the type passed for the lambda capture was incorrect. One more argument to abandon the getSVal overload which does not require the type information. Differential Revision: https://reviews.llvm.org/D43925 Added: cfe/trunk/test/Analysis/nonnullparamchecker-crash.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp?rev=326520&r1=326519&r2=326520&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp Thu Mar 1 16:55:59 2018 @@ -1405,6 +1405,8 @@ SVal RegionStoreManager::getBinding(Regi assert(!T.isNull() && "Unable to auto-detect binding type!"); assert(!T->isVoidType() && "Attempting to dereference a void pointer!"); MR = GetElementZeroRegion(cast<SubRegion>(MR), T); + } else { + T = cast<TypedValueRegion>(MR)->getValueType(); } // FIXME: Perhaps this method should just take a 'const MemRegion*' argument Added: cfe/trunk/test/Analysis/nonnullparamchecker-crash.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/nonnullparamchecker-crash.cpp?rev=326520&view=auto ============================================================================== --- cfe/trunk/test/Analysis/nonnullparamchecker-crash.cpp (added) +++ cfe/trunk/test/Analysis/nonnullparamchecker-crash.cpp Thu Mar 1 16:55:59 2018 @@ -0,0 +1,11 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s +class C {}; + +// expected-no-diagnostics +void f(C i) { + auto lambda = [&] { f(i); }; + typedef decltype(lambda) T; + T* blah = new T(lambda); + (*blah)(); + delete blah; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits