From: Reid Kleckner Date: Thu, 5 Nov 2015 00:24:01 +0000 (+0000) Subject: Fix nullptr crash in -Wthread-safety-beta X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7e917ce1e3480a4089ae545ddc7ab149458ce941;p=clang Fix nullptr crash in -Wthread-safety-beta git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252107 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/Analyses/ThreadSafetyCommon.h b/include/clang/Analysis/Analyses/ThreadSafetyCommon.h index d9efe1980c..e3570130c2 100644 --- a/include/clang/Analysis/Analyses/ThreadSafetyCommon.h +++ b/include/clang/Analysis/Analyses/ThreadSafetyCommon.h @@ -287,7 +287,7 @@ public: } const ValueDecl* valueDecl() const { - if (Negated) + if (Negated || CapExpr == nullptr) return nullptr; if (auto *P = dyn_cast(CapExpr)) return P->clangDecl(); diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index 01e16a488c..b5d2f8e1de 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -5182,3 +5182,10 @@ void test() { } // end namespace LockableUnions +// This used to crash. +class acquired_before_empty_str { + void WaitUntilSpaceAvailable() { + lock_.ReaderLock(); // expected-note {{acquired here}} + } // expected-warning {{mutex 'lock_' is still held at the end of function}} + Mutex lock_ ACQUIRED_BEFORE(""); +};