diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2015-05-04 18:23:54 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2015-05-04 18:23:54 +0000 |
commit | ed4cd4295595411a56fb16b4c9cc415167af6ee5 (patch) | |
tree | 2ef969ad5aa67b105c678eb3cc6bae4ae3e540a9 | |
parent | 7279da2af3658f4c44321c89f5476c6c26233cfb (diff) | |
download | llvm-ed4cd4295595411a56fb16b4c9cc415167af6ee5.zip llvm-ed4cd4295595411a56fb16b4c9cc415167af6ee5.tar.gz llvm-ed4cd4295595411a56fb16b4c9cc415167af6ee5.tar.bz2 |
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
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/thread-safety-reference-handling.cpp | 17 |
2 files changed, 19 insertions, 2 deletions
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<VarDecl*>(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(); +} |