From ed4cd4295595411a56fb16b4c9cc415167af6ee5 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Mon, 4 May 2015 18:23:54 +0000 Subject: Merging r232425: ------------------------------------------------------------------------ r232425 | rtrieu | 2015-03-16 17:49:43 -0400 (Mon, 16 Mar 2015) | 4 lines Take the non-reference type when constructing a dummy expression. Otherwise, Expr will assert during construction with a reference type. ------------------------------------------------------------------------ llvm-svn: 236440 --- clang/lib/Analysis/ThreadSafety.cpp | 4 ++-- clang/test/SemaCXX/thread-safety-reference-handling.cpp | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 clang/test/SemaCXX/thread-safety-reference-handling.cpp diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index a986c58..f45d6e7 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -2108,8 +2108,8 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { // Create a dummy expression, VarDecl *VD = const_cast(AD.getVarDecl()); - DeclRefExpr DRE(VD, false, VD->getType(), VK_LValue, - AD.getTriggerStmt()->getLocEnd()); + DeclRefExpr DRE(VD, false, VD->getType().getNonReferenceType(), + VK_LValue, AD.getTriggerStmt()->getLocEnd()); LocksetBuilder.handleCall(&DRE, DD); break; } diff --git a/clang/test/SemaCXX/thread-safety-reference-handling.cpp b/clang/test/SemaCXX/thread-safety-reference-handling.cpp new file mode 100644 index 0000000..2f7eb48 --- /dev/null +++ b/clang/test/SemaCXX/thread-safety-reference-handling.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wthread-safety-analysis -std=c++11 %s +// expected-no-diagnostics + +class Base { +public: + Base() {} + virtual ~Base(); +}; + +class S : public Base { +public: + ~S() override = default; +}; + +void Test() { + const S &s = S(); +} -- cgit v1.1