diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2016-02-10 10:50:12 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2016-02-10 10:50:12 +0000 |
commit | 4bcad7f236dd9505543e77845cec6056fcec4efc (patch) | |
tree | 55b925f042990166ceac0719e9b058e03ba1cbf5 | |
parent | ed844cbc0f5b9391314edb7d34ea71a060b0faa2 (diff) | |
download | bcm5719-llvm-4bcad7f236dd9505543e77845cec6056fcec4efc.tar.gz bcm5719-llvm-4bcad7f236dd9505543e77845cec6056fcec4efc.zip |
Fix PR26543: add a check for definition in CXXRecordDecl.
llvm-svn: 260370
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 3 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_messages.cpp | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 3ba5daa0304..9f4daeeffe9 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -669,7 +669,8 @@ DSAStackTy::DSAVarData DSAStackTy::getTopDSA(ValueDecl *D, bool FromParent) { if (auto *CTD = CTSD->getSpecializedTemplate()) RD = CTD->getTemplatedDecl(); if (IsConstant && - !(SemaRef.getLangOpts().CPlusPlus && RD && RD->hasMutableFields())) { + !(SemaRef.getLangOpts().CPlusPlus && RD && RD->hasDefinition() && + RD->hasMutableFields())) { // Variables with const-qualified type having no mutable member may be // listed in a firstprivate clause, even if they are static data members. DSAVarData DVarTemp = hasDSA(D, MatchesAnyClause(OMPC_firstprivate), diff --git a/clang/test/OpenMP/parallel_messages.cpp b/clang/test/OpenMP/parallel_messages.cpp index 8aee8414f03..4db55a01954 100644 --- a/clang/test/OpenMP/parallel_messages.cpp +++ b/clang/test/OpenMP/parallel_messages.cpp @@ -5,7 +5,12 @@ void foo() { #pragma omp parallel // expected-error {{unexpected OpenMP directive '#pragma omp parallel'}} +struct S; +S& bar(); int main(int argc, char **argv) { + S &s = bar(); + #pragma omp parallel + (void)&s; #pragma omp parallel { // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}} foo(); #pragma omp parallel ( // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}} |