From 7e917ce1e3480a4089ae545ddc7ab149458ce941 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 5 Nov 2015 00:24:01 +0000 Subject: [PATCH] Fix nullptr crash in -Wthread-safety-beta git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252107 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Analysis/Analyses/ThreadSafetyCommon.h | 2 +- test/SemaCXX/warn-thread-safety-analysis.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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(""); +}; -- 2.50.1