From a1877598aaafe562c14f82f552124bdf48c521ab Mon Sep 17 00:00:00 2001 From: Richard Trieu Date: Mon, 16 Mar 2015 21:49:43 +0000 Subject: [PATCH] Take the non-reference type when constructing a dummy expression. Otherwise, Expr will assert during construction with a reference type. llvm-svn: 232425 --- 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 a5782ee..e2c6ab5 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/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/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(); +} -- 2.7.4