From: Richard Trieu Date: Mon, 16 Mar 2015 21:49:43 +0000 (+0000) Subject: Take the non-reference type when constructing a dummy expression. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=58b5ea42889ecd48b1be10e88cf13825a30ff7b4;p=clang Take the non-reference type when constructing a dummy expression. Otherwise, Expr will assert during construction with a reference type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232425 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ThreadSafety.cpp b/lib/Analysis/ThreadSafety.cpp index a5782eea2a..e2c6ab5d94 100644 --- a/lib/Analysis/ThreadSafety.cpp +++ b/lib/Analysis/ThreadSafety.cpp @@ -2306,8 +2306,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/test/SemaCXX/thread-safety-reference-handling.cpp b/test/SemaCXX/thread-safety-reference-handling.cpp new file mode 100644 index 0000000000..2f7eb48d34 --- /dev/null +++ b/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(); +}