r211262 - [OPENMP] Improved diagnostic messages for vars with the predetermined data sharing attributes and reformatting
Alexey Bataev
a.bataev at hotmail.com
Thu Jun 19 02:53:56 PDT 2014
Hal, ok, I'll do.
Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team
19 Июнь 2014 г. 13:26:49, Hal Finkel писал:
> ----- Original Message -----
>> From: "Alexey Bataev" <a.bataev at hotmail.com>
>> To: cfe-commits at cs.uiuc.edu
>> Sent: Thursday, June 19, 2014 4:13:46 AM
>> Subject: r211262 - [OPENMP] Improved diagnostic messages for vars with the predetermined data sharing attributes and
>> reformatting
>>
>> Author: abataev
>> Date: Thu Jun 19 04:13:45 2014
>> New Revision: 211262
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=211262&view=rev
>> Log:
>> [OPENMP] Improved diagnostic messages for vars with the predetermined
>> data sharing attributes and reformatting
>
> Thanks for improving these. In the future, please separate the reformatting changes from the functional ones.
>
> -Hal
>
>>
>> Modified:
>> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> cfe/trunk/lib/Sema/SemaOpenMP.cpp
>> cfe/trunk/test/OpenMP/for_ast_print.cpp
>> cfe/trunk/test/OpenMP/for_firstprivate_messages.cpp
>> cfe/trunk/test/OpenMP/for_lastprivate_messages.cpp
>> cfe/trunk/test/OpenMP/for_private_messages.cpp
>> cfe/trunk/test/OpenMP/for_reduction_messages.cpp
>> cfe/trunk/test/OpenMP/no_option.c
>> cfe/trunk/test/OpenMP/no_option_no_warn.c
>> cfe/trunk/test/OpenMP/parallel_private_messages.cpp
>> cfe/trunk/test/OpenMP/parallel_reduction_messages.cpp
>> cfe/trunk/test/OpenMP/simd_lastprivate_messages.cpp
>>
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Jun 19
>> 04:13:45 2014
>> @@ -6991,7 +6991,15 @@ def err_omp_wrong_dsa : Error<
>> def note_omp_explicit_dsa : Note<
>> "defined as %0">;
>> def note_omp_predetermined_dsa : Note<
>> - "predetermined as %0">;
>> + "%select{static data member is predetermined as shared|"
>> + "variable with static storage duration is predetermined as
>> shared|"
>> + "loop iteration variable is predetermined as private|"
>> + "loop iteration variable is predetermined as linear|"
>> + "loop iteration variable is predetermined as lastprivate|"
>> + "constant variable is predetermined as shared|"
>> + "global variable is predetermined as shared|"
>> + "variable with automatic storage duration is predetermined as
>> private}0"
>> + "%select{|; perhaps you forget to enclose 'omp %2' directive into
>> a parallel or another task region?}1">;
>> def err_omp_loop_var_dsa : Error<
>> "loop iteration variable may not be %0">;
>> def err_omp_not_for : Error<
>>
>> Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Thu Jun 19 04:13:45 2014
>> @@ -39,6 +39,7 @@ enum DefaultDataSharingAttributes {
>> DSA_none = 1 << 0, /// \brief Default data sharing attribute
>> 'none'.
>> DSA_shared = 1 << 1 /// \brief Default data sharing attribute
>> 'shared'.
>> };
>> +
>> template <class T> struct MatchesAny {
>> explicit MatchesAny(ArrayRef<T> Arr) : Arr(std::move(Arr)) {}
>> bool operator()(T Kind) {
>> @@ -53,8 +54,7 @@ private:
>> };
>> struct MatchesAlways {
>> MatchesAlways() {}
>> - template <class T>
>> - bool operator()(T) { return true; }
>> + template <class T> bool operator()(T) { return true; }
>> };
>>
>> typedef MatchesAny<OpenMPClauseKind> MatchesAnyClause;
>> @@ -100,7 +100,7 @@ private:
>>
>> /// \brief Stack of used declaration and their data-sharing
>> attributes.
>> StackTy Stack;
>> - Sema &Actions;
>> + Sema &SemaRef;
>>
>> typedef SmallVector<SharingMapTy, 8>::reverse_iterator
>> reverse_iterator;
>>
>> @@ -110,7 +110,7 @@ private:
>> bool isOpenMPLocal(VarDecl *D, StackTy::reverse_iterator Iter);
>>
>> public:
>> - explicit DSAStackTy(Sema &S) : Stack(1), Actions(S) {}
>> + explicit DSAStackTy(Sema &S) : Stack(1), SemaRef(S) {}
>>
>> void push(OpenMPDirectiveKind DKind, const DeclarationNameInfo
>> &DirName,
>> Scope *CurScope) {
>> @@ -353,8 +353,8 @@ DSAStackTy::DSAVarData DSAStackTy::getTo
>> if (D->isStaticDataMember()) {
>> // 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),
>> - MatchesAlways());
>> + DSAVarData DVarTemp =
>> + hasDSA(D, MatchesAnyClause(OMPC_firstprivate),
>> MatchesAlways());
>> if (DVarTemp.CKind == OMPC_firstprivate && DVarTemp.RefExpr)
>> return DVar;
>>
>> @@ -363,7 +363,7 @@ DSAStackTy::DSAVarData DSAStackTy::getTo
>> }
>>
>> QualType Type =
>> D->getType().getNonReferenceType().getCanonicalType();
>> - bool IsConstant = Type.isConstant(Actions.getASTContext());
>> + bool IsConstant = Type.isConstant(SemaRef.getASTContext());
>> while (Type->isArrayType()) {
>> QualType ElemType =
>> cast<ArrayType>(Type.getTypePtr())->getElementType();
>> Type = ElemType.getNonReferenceType().getCanonicalType();
>> @@ -373,13 +373,13 @@ DSAStackTy::DSAVarData DSAStackTy::getTo
>> // Variables with const qualified type having no mutable member
>> are
>> // shared.
>> CXXRecordDecl *RD =
>> - Actions.getLangOpts().CPlusPlus ? Type->getAsCXXRecordDecl() :
>> nullptr;
>> + SemaRef.getLangOpts().CPlusPlus ? Type->getAsCXXRecordDecl() :
>> nullptr;
>> if (IsConstant &&
>> - !(Actions.getLangOpts().CPlusPlus && RD &&
>> RD->hasMutableFields())) {
>> + !(SemaRef.getLangOpts().CPlusPlus && RD &&
>> 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),
>> - MatchesAlways());
>> + DSAVarData DVarTemp =
>> + hasDSA(D, MatchesAnyClause(OMPC_firstprivate),
>> MatchesAlways());
>> if (DVarTemp.CKind == OMPC_firstprivate && DVarTemp.RefExpr)
>> return DVar;
>>
>> @@ -515,16 +515,16 @@ namespace {
>>
>> class VarDeclFilterCCC : public CorrectionCandidateCallback {
>> private:
>> - Sema &Actions;
>> + Sema &SemaRef;
>>
>> public:
>> - explicit VarDeclFilterCCC(Sema &S) : Actions(S) {}
>> + explicit VarDeclFilterCCC(Sema &S) : SemaRef(S) {}
>> bool ValidateCandidate(const TypoCorrection &Candidate) override {
>> NamedDecl *ND = Candidate.getCorrectionDecl();
>> if (VarDecl *VD = dyn_cast_or_null<VarDecl>(ND)) {
>> return VD->hasGlobalStorage() &&
>> - Actions.isDeclInScope(ND,
>> Actions.getCurLexicalContext(),
>> - Actions.getCurScope());
>> + SemaRef.isDeclInScope(ND,
>> SemaRef.getCurLexicalContext(),
>> + SemaRef.getCurScope());
>> }
>> return false;
>> }
>> @@ -754,10 +754,54 @@ Sema::CheckOMPThreadPrivateDecl(SourceLo
>> return D;
>> }
>>
>> +static void ReportOriginalDSA(Sema &SemaRef, DSAStackTy *Stack,
>> + const VarDecl *VD,
>> DSAStackTy::DSAVarData DVar,
>> + bool IsLoopIterVar = false) {
>> + if (DVar.RefExpr) {
>> + SemaRef.Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> + << getOpenMPClauseName(DVar.CKind);
>> + return;
>> + }
>> + enum {
>> + PDSA_StaticMemberShared,
>> + PDSA_StaticLocalVarShared,
>> + PDSA_LoopIterVarPrivate,
>> + PDSA_LoopIterVarLinear,
>> + PDSA_LoopIterVarLastprivate,
>> + PDSA_ConstVarShared,
>> + PDSA_GlobalVarShared,
>> + PDSA_LocalVarPrivate
>> + } Reason;
>> + bool ReportHint = false;
>> + if (IsLoopIterVar) {
>> + if (DVar.CKind == OMPC_private)
>> + Reason = PDSA_LoopIterVarPrivate;
>> + else if (DVar.CKind == OMPC_lastprivate)
>> + Reason = PDSA_LoopIterVarLastprivate;
>> + else
>> + Reason = PDSA_LoopIterVarLinear;
>> + } else if (VD->isStaticLocal())
>> + Reason = PDSA_StaticLocalVarShared;
>> + else if (VD->isStaticDataMember())
>> + Reason = PDSA_StaticMemberShared;
>> + else if (VD->isFileVarDecl())
>> + Reason = PDSA_GlobalVarShared;
>> + else if (VD->getType().isConstant(SemaRef.getASTContext()))
>> + Reason = PDSA_ConstVarShared;
>> + else {
>> + ReportHint = true;
>> + Reason = PDSA_LocalVarPrivate;
>> + }
>> +
>> + SemaRef.Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> + << Reason << ReportHint
>> + << getOpenMPDirectiveName(Stack->getCurrentDirective());
>> +}
>> +
>> namespace {
>> class DSAAttrChecker : public StmtVisitor<DSAAttrChecker, void> {
>> DSAStackTy *Stack;
>> - Sema &Actions;
>> + Sema &SemaRef;
>> bool ErrorFound;
>> CapturedStmt *CS;
>> llvm::SmallVector<Expr *, 8> ImplicitFirstprivate;
>> @@ -786,7 +830,7 @@ public:
>> if (DVar.CKind == OMPC_unknown && Stack->getDefaultDSA() ==
>> DSA_none &&
>> (isOpenMPParallelDirective(DKind) || DKind == OMPD_task))
>> {
>> ErrorFound = true;
>> - Actions.Diag(ELoc, diag::err_omp_no_dsa_for_variable) << VD;
>> + SemaRef.Diag(ELoc, diag::err_omp_no_dsa_for_variable) << VD;
>> return;
>> }
>>
>> @@ -798,11 +842,8 @@ public:
>> MatchesAlways());
>> if (DKind == OMPD_task && DVar.CKind == OMPC_reduction) {
>> ErrorFound = true;
>> - Actions.Diag(ELoc, diag::err_omp_reduction_in_task);
>> - if (DVar.RefExpr) {
>> - Actions.Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(OMPC_reduction);
>> - }
>> + SemaRef.Diag(ELoc, diag::err_omp_reduction_in_task);
>> + ReportOriginalDSA(SemaRef, Stack, VD, DVar);
>> return;
>> }
>>
>> @@ -830,8 +871,8 @@ public:
>> bool isErrorFound() { return ErrorFound; }
>> ArrayRef<Expr *> getImplicitFirstprivate() { return
>> ImplicitFirstprivate; }
>>
>> - DSAAttrChecker(DSAStackTy *S, Sema &Actions, CapturedStmt *CS)
>> - : Stack(S), Actions(Actions), ErrorFound(false), CS(CS) {}
>> + DSAAttrChecker(DSAStackTy *S, Sema &SemaRef, CapturedStmt *CS)
>> + : Stack(S), SemaRef(SemaRef), ErrorFound(false), CS(CS) {}
>> };
>> } // namespace
>>
>> @@ -1363,19 +1404,14 @@ static bool CheckOpenMPIterationSpace(Op
>> // associated for-loop.
>> SemaRef.Diag(Init->getLocStart(), diag::err_omp_loop_var_dsa)
>> << getOpenMPClauseName(DVar.CKind);
>> - if (DVar.RefExpr)
>> - SemaRef.Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - else
>> - SemaRef.Diag(Var->getLocation(),
>> diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(SemaRef, &DSA, Var, DVar, true);
>> HasErrors = true;
>> } else {
>> // Make the loop iteration variable private by default.
>> DSA.addDSA(Var, nullptr, OMPC_private);
>> }
>>
>> - assert(isOpenMPLoopDirective(DKind) && "DSA for non-simd loop
>> vars");
>> + assert(isOpenMPLoopDirective(DKind) && "DSA for non-loop vars");
>>
>> // Check test-expr.
>> HasErrors |= ISC.CheckCond(For->getCond());
>> @@ -1907,13 +1943,7 @@ OMPClause *Sema::ActOnOpenMPPrivateClaus
>> if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_private) {
>> Diag(ELoc, diag::err_omp_wrong_dsa) <<
>> getOpenMPClauseName(DVar.CKind)
>> <<
>> getOpenMPClauseName(OMPC_private);
>> - if (DVar.RefExpr) {
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - } else {
>> - Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - }
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2046,8 +2076,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>> Diag(ELoc, diag::err_omp_wrong_dsa)
>> << getOpenMPClauseName(DVar.CKind)
>> << getOpenMPClauseName(OMPC_firstprivate);
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2067,8 +2096,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>> Diag(ELoc, diag::err_omp_wrong_dsa)
>> << getOpenMPClauseName(DVar.CKind)
>> << getOpenMPClauseName(OMPC_firstprivate);
>> - Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2084,10 +2112,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>> Diag(ELoc, diag::err_omp_required_access)
>> << getOpenMPClauseName(OMPC_firstprivate)
>> << getOpenMPClauseName(OMPC_shared);
>> - if (DVar.RefExpr) {
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - }
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>> }
>> @@ -2181,12 +2206,7 @@ OMPClause *Sema::ActOnOpenMPLastprivateC
>> Diag(ELoc, diag::err_omp_wrong_dsa)
>> << getOpenMPClauseName(DVar.CKind)
>> << getOpenMPClauseName(OMPC_lastprivate);
>> - if (DVar.RefExpr)
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - else
>> - Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2203,12 +2223,7 @@ OMPClause *Sema::ActOnOpenMPLastprivateC
>> Diag(ELoc, diag::err_omp_required_access)
>> << getOpenMPClauseName(OMPC_lastprivate)
>> << getOpenMPClauseName(OMPC_shared);
>> - if (DVar.RefExpr)
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - else
>> - Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>> }
>> @@ -2328,8 +2343,7 @@ OMPClause *Sema::ActOnOpenMPSharedClause
>> DVar.RefExpr) {
>> Diag(ELoc, diag::err_omp_wrong_dsa) <<
>> getOpenMPClauseName(DVar.CKind)
>> <<
>> getOpenMPClauseName(OMPC_shared);
>> - Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2585,13 +2599,7 @@ OMPClause *Sema::ActOnOpenMPReductionCla
>> Diag(ELoc, diag::err_omp_wrong_dsa)
>> << getOpenMPClauseName(DVar.CKind)
>> << getOpenMPClauseName(OMPC_reduction);
>> - if (DVar.RefExpr) {
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - } else {
>> - Diag(VD->getLocation(), diag::note_omp_predetermined_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - }
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>> @@ -2606,10 +2614,7 @@ OMPClause *Sema::ActOnOpenMPReductionCla
>> Diag(ELoc, diag::err_omp_required_access)
>> << getOpenMPClauseName(OMPC_reduction)
>> << getOpenMPClauseName(OMPC_shared);
>> - if (DVar.RefExpr) {
>> - Diag(DVar.RefExpr->getExprLoc(),
>> diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> - }
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>> }
>> @@ -2716,8 +2721,7 @@ OMPClause *Sema::ActOnOpenMPLinearClause
>> if (DVar.RefExpr) {
>> Diag(ELoc, diag::err_omp_wrong_dsa) <<
>> getOpenMPClauseName(DVar.CKind)
>> <<
>> getOpenMPClauseName(OMPC_linear);
>> - Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa)
>> - << getOpenMPClauseName(DVar.CKind);
>> + ReportOriginalDSA(*this, DSAStack, VD, DVar);
>> continue;
>> }
>>
>>
>> Modified: cfe/trunk/test/OpenMP/for_ast_print.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_ast_print.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/for_ast_print.cpp (original)
>> +++ cfe/trunk/test/OpenMP/for_ast_print.cpp Thu Jun 19 04:13:45 2014
>> @@ -14,19 +14,21 @@ T tmain(T argc) {
>> static T a;
>> // CHECK: static T a;
>> #pragma omp for
>> -// CHECK-NEXT: #pragma omp for
>> - for (int i=0; i < 2; ++i) a=2;
>> + // CHECK-NEXT: #pragma omp for
>> + for (int i = 0; i < 2; ++i)
>> + a = 2;
>> // CHECK-NEXT: for (int i = 0; i < 2; ++i)
>> // CHECK-NEXT: a = 2;
>> #pragma omp parallel
>> -#pragma omp for private(argc,b),firstprivate(c, d),lastprivate(d,f)
>> collapse(N)
>> +#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d,
>> f) collapse(N)
>> for (int i = 0; i < 10; ++i)
>> - for (int j = 0; j < 10; ++j)foo();
>> -// CHECK-NEXT: #pragma omp parallel
>> -// CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d)
>> lastprivate(d,f) collapse(N)
>> -// CHECK-NEXT: for (int i = 0; i < 10; ++i)
>> -// CHECK-NEXT: for (int j = 0; j < 10; ++j)
>> -// CHECK-NEXT: foo();
>> + for (int j = 0; j < 10; ++j)
>> + foo();
>> + // CHECK-NEXT: #pragma omp parallel
>> + // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d)
>> lastprivate(d,f) collapse(N)
>> + // CHECK-NEXT: for (int i = 0; i < 10; ++i)
>> + // CHECK-NEXT: for (int j = 0; j < 10; ++j)
>> + // CHECK-NEXT: foo();
>> return T();
>> }
>>
>> @@ -35,19 +37,21 @@ int main(int argc, char **argv) {
>> static int a;
>> // CHECK: static int a;
>> #pragma omp for
>> -// CHECK-NEXT: #pragma omp for
>> - for (int i=0; i < 2; ++i)a=2;
>> + // CHECK-NEXT: #pragma omp for
>> + for (int i = 0; i < 2; ++i)
>> + a = 2;
>> // CHECK-NEXT: for (int i = 0; i < 2; ++i)
>> // CHECK-NEXT: a = 2;
>> #pragma omp parallel
>> -#pragma omp for private(argc,b),firstprivate(argv,
>> c),lastprivate(d,f) collapse(2)
>> +#pragma omp for private(argc, b), firstprivate(argv, c),
>> lastprivate(d, f) collapse(2)
>> for (int i = 0; i < 10; ++i)
>> - for (int j = 0; j < 10; ++j)foo();
>> -// CHECK-NEXT: #pragma omp parallel
>> -// CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c)
>> lastprivate(d,f) collapse(2)
>> -// CHECK-NEXT: for (int i = 0; i < 10; ++i)
>> -// CHECK-NEXT: for (int j = 0; j < 10; ++j)
>> -// CHECK-NEXT: foo();
>> + for (int j = 0; j < 10; ++j)
>> + foo();
>> + // CHECK-NEXT: #pragma omp parallel
>> + // CHECK-NEXT: #pragma omp for private(argc,b)
>> firstprivate(argv,c) lastprivate(d,f) collapse(2)
>> + // CHECK-NEXT: for (int i = 0; i < 10; ++i)
>> + // CHECK-NEXT: for (int j = 0; j < 10; ++j)
>> + // CHECK-NEXT: foo();
>> return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0]));
>> }
>>
>>
>> Modified: cfe/trunk/test/OpenMP/for_firstprivate_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_firstprivate_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/for_firstprivate_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/for_firstprivate_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -65,7 +65,7 @@ int foomain(int argc, char **argv) {
>> I e(4); // expected-note {{'e' defined here}}
>> C g(5); // expected-note 2 {{'g' defined here}}
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> + int &j = i; // expected-note {{'j' defined here}}
>> #pragma omp parallel
>> #pragma omp for firstprivate // expected-error {{expected '(' after
>> 'firstprivate'}}
>> for (int k = 0; k < argc; ++k)
>> @@ -121,7 +121,7 @@ int foomain(int argc, char **argv) {
>> #pragma omp parallel
>> {
>> int v = 0;
>> - int i; // expected-note {{predetermined as
>> private}}
>> + int i; // expected-note {{variable with
>> automatic storage duration is predetermined as private; perhaps you
>> forget to enclose 'omp for' directive into a parallel or another
>> task region?}}
>> #pragma omp for firstprivate(i) // expected-error {{private variable
>> cannot be firstprivate}}
>> for (int k = 0; k < argc; ++k) {
>> i = k;
>> @@ -146,7 +146,7 @@ int foomain(int argc, char **argv) {
>> for (i = 0; i < argc; ++i)
>> foo();
>> #pragma omp parallel reduction(+ : i) // expected-note {{defined as
>> reduction}}
>> -#pragma omp for firstprivate(i) // expected-error {{firstprivate
>> variable must be shared}}
>> +#pragma omp for firstprivate(i) // expected-error
>> {{firstprivate variable must be shared}}
>> for (i = 0; i < argc; ++i)
>> foo();
>> return 0;
>> @@ -160,7 +160,7 @@ int main(int argc, char **argv) {
>> S3 m;
>> S6 n(2);
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> + int &j = i; // expected-note {{'j' defined here}}
>> #pragma omp parallel
>> #pragma omp for firstprivate // expected-error {{expected '(' after
>> 'firstprivate'}}
>> for (i = 0; i < argc; ++i)
>> @@ -273,7 +273,7 @@ int main(int argc, char **argv) {
>> #pragma omp parallel
>> {
>> int v = 0;
>> - int i; // expected-note {{predetermined as
>> private}}
>> + int i; // expected-note {{variable with
>> automatic storage duration is predetermined as private; perhaps you
>> forget to enclose 'omp for' directive into a parallel or another
>> task region?}}
>> #pragma omp for firstprivate(i) // expected-error {{private variable
>> cannot be firstprivate}}
>> for (int k = 0; k < argc; ++k) {
>> i = k;
>> @@ -285,7 +285,7 @@ int main(int argc, char **argv) {
>> for (i = 0; i < argc; ++i)
>> foo();
>> #pragma omp parallel reduction(+ : i) // expected-note {{defined as
>> reduction}}
>> -#pragma omp for firstprivate(i) // expected-error {{firstprivate
>> variable must be shared}}
>> +#pragma omp for firstprivate(i) // expected-error
>> {{firstprivate variable must be shared}}
>> for (i = 0; i < argc; ++i)
>> foo();
>>
>>
>> Modified: cfe/trunk/test/OpenMP/for_lastprivate_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_lastprivate_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/for_lastprivate_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/for_lastprivate_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -15,10 +15,10 @@ class S2 {
>> public:
>> S2() : a(0) {}
>> S2(S2 &s2) : a(s2.a) {}
>> - static float S2s; // expected-note {{predetermined as shared}}
>> + static float S2s; // expected-note {{static data member is
>> predetermined as shared}}
>> static const float S2sc;
>> };
>> -const float S2::S2sc = 0; // expected-note {{predetermined as
>> shared}}
>> +const float S2::S2sc = 0; // expected-note {{static data member is
>> predetermined as shared}}
>> const S2 b;
>> const S2 ba[5];
>> class S3 { // expected-note 2 {{'S3' declared here}}
>> @@ -29,9 +29,9 @@ public:
>> S3() : a(0) {}
>> S3(S3 &s3) : a(s3.a) {}
>> };
>> -const S3 c; // expected-note {{predetermined as shared}}
>> -const S3 ca[5]; // expected-note {{predetermined as shared}}
>> -extern const int f; // expected-note {{predetermined as shared}}
>> +const S3 c; // expected-note {{global variable is
>> predetermined as shared}}
>> +const S3 ca[5]; // expected-note {{global variable is
>> predetermined as shared}}
>> +extern const int f; // expected-note {{global variable is
>> predetermined as shared}}
>> class S4 { // expected-note 3 {{'S4' declared here}}
>> int a;
>> S4();
>> @@ -121,7 +121,7 @@ int foomain(int argc, char **argv) {
>> #pragma omp parallel
>> {
>> int v = 0;
>> - int i; // expected-note {{predetermined as
>> private}}
>> + int i; // expected-note {{variable with
>> automatic storage duration is predetermined as private; perhaps you
>> forget to enclose 'omp for' directive into a parallel or another
>> task region?}}
>> #pragma omp for lastprivate(i) // expected-error {{lastprivate
>> variable must be shared}}
>> for (int k = 0; k < argc; ++k) {
>> i = k;
>> @@ -141,8 +141,8 @@ int foomain(int argc, char **argv) {
>> }
>>
>> int main(int argc, char **argv) {
>> - const int d = 5; // expected-note {{predetermined as
>> shared}}
>> - const int da[5] = {0}; // expected-note {{predetermined as
>> shared}}
>> + const int d = 5; // expected-note {{constant variable is
>> predetermined as shared}}
>> + const int da[5] = {0}; // expected-note {{constant variable is
>> predetermined as shared}}
>> S4 e(4); // expected-note {{'e' defined here}}
>> S5 g(5); // expected-note {{'g' defined here}}
>> S3 m; // expected-note 2 {{'m' defined here}}
>>
>> Modified: cfe/trunk/test/OpenMP/for_private_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_private_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/for_private_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/for_private_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -11,77 +11,100 @@ struct S1; // expected-note 2 {{declared
>> extern S1 a;
>> class S2 {
>> mutable int a;
>> +
>> public:
>> - S2():a(0) { }
>> + S2() : a(0) {}
>> };
>> const S2 b;
>> const S2 ba[5];
>> class S3 {
>> int a;
>> +
>> public:
>> - S3():a(0) { }
>> + S3() : a(0) {}
>> };
>> const S3 ca[5];
>> class S4 { // expected-note {{'S4' declared here}}
>> int a;
>> S4();
>> +
>> public:
>> - S4(int v):a(v) { }
>> + S4(int v) : a(v) {}
>> };
>> class S5 { // expected-note {{'S5' declared here}}
>> int a;
>> - S5():a(0) {}
>> + S5() : a(0) {}
>> +
>> public:
>> - S5(int v):a(v) { }
>> + S5(int v) : a(v) {}
>> };
>>
>> S3 h;
>> #pragma omp threadprivate(h) // expected-note 2 {{defined as
>> threadprivate or thread local}}
>>
>> -template<class I, class C> int foomain(I argc, C **argv) {
>> +template <class I, class C>
>> +int foomain(I argc, C **argv) {
>> I e(4);
>> I g(5);
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> - #pragma omp for private // expected-error {{expected '(' after
>> 'private'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private ( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private () // expected-error {{expected
>> expression}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc)
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (S1) // expected-error {{'S1' does not
>> refer to a value}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (a, b) // expected-error {{private
>> variable with incomplete type 'S1'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argv[1]) // expected-error {{expected
>> variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(e, g)
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(h) // expected-error {{threadprivate or
>> thread local variable cannot be private}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for shared(i) // expected-error {{unexpected OpenMP
>> clause 'shared' in directive '#pragma omp for'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp parallel
>> + int &j = i; // expected-note {{'j' defined here}}
>> +#pragma omp for private // expected-error {{expected '(' after
>> 'private'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private( // expected-error {{expected expression}}
>> expected-error {{expected ')'}} expected-note {{to match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private() // expected-error {{expected expression}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(S1) // expected-error {{'S1' does not refer
>> to a value}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(a, b) // expected-error {{private variable
>> with incomplete type 'S1'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argv[1]) // expected-error {{expected
>> variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(e, g)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(h) // expected-error {{threadprivate or
>> thread local variable cannot be private}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for shared(i) // expected-error {{unexpected OpenMP
>> clause 'shared' in directive '#pragma omp for'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp parallel
>> {
>> int v = 0;
>> int i;
>> - #pragma omp for private(i)
>> - for (int k = 0; k < argc; ++k) { i = k; v += i; }
>> +#pragma omp for private(i)
>> + for (int k = 0; k < argc; ++k) {
>> + i = k;
>> + v += i;
>> + }
>> }
>> - #pragma omp parallel shared(i)
>> - #pragma omp parallel private(i)
>> - #pragma omp for private(j) // expected-error {{arguments of OpenMP
>> clause 'private' cannot be of reference type}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(i)
>> - for (int k = 0; k < argc; ++k) ++k;
>> +#pragma omp parallel shared(i)
>> +#pragma omp parallel private(i)
>> +#pragma omp for private(j) // expected-error {{arguments of OpenMP
>> clause 'private' cannot be of reference type}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(i)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> return 0;
>> }
>>
>> @@ -89,45 +112,61 @@ int main(int argc, char **argv) {
>> S4 e(4); // expected-note {{'e' defined here}}
>> S5 g(5); // expected-note {{'g' defined here}}
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> - #pragma omp for private // expected-error {{expected '(' after
>> 'private'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private ( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private () // expected-error {{expected
>> expression}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argc)
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (S1) // expected-error {{'S1' does not
>> refer to a value}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (a, b) // expected-error {{private
>> variable with incomplete type 'S1'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private (argv[1]) // expected-error {{expected
>> variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(e, g) // expected-error 2 {{private
>> variable must have an accessible, unambiguous default constructor}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(h) // expected-error {{threadprivate or
>> thread local variable cannot be private}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for shared(i) // expected-error {{unexpected OpenMP
>> clause 'shared' in directive '#pragma omp for'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp parallel
>> + int &j = i; // expected-note {{'j' defined here}}
>> +#pragma omp for private // expected-error {{expected '(' after
>> 'private'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private( // expected-error {{expected expression}}
>> expected-error {{expected ')'}} expected-note {{to match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private() // expected-error {{expected expression}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argc)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(S1) // expected-error {{'S1' does not refer
>> to a value}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(a, b) // expected-error {{private variable
>> with incomplete type 'S1'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(argv[1]) // expected-error {{expected
>> variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(e, g) // expected-error 2 {{private variable
>> must have an accessible, unambiguous default constructor}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(h) // expected-error {{threadprivate or
>> thread local variable cannot be private}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for shared(i) // expected-error {{unexpected OpenMP
>> clause 'shared' in directive '#pragma omp for'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp parallel
>> {
>> int i;
>> - #pragma omp for private(i)
>> - for (int k = 0; k < argc; ++k) ++k;
>> +#pragma omp for private(i)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> }
>> - #pragma omp parallel shared(i)
>> - #pragma omp parallel private(i)
>> - #pragma omp for private(j) // expected-error {{arguments of OpenMP
>> clause 'private' cannot be of reference type}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp for private(i)
>> - for (int k = 0; k < argc; ++k) ++k;
>> +#pragma omp parallel shared(i)
>> +#pragma omp parallel private(i)
>> +#pragma omp for private(j) // expected-error {{arguments of OpenMP
>> clause 'private' cannot be of reference type}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp for private(i)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>>
>> return 0;
>> }
>>
>> Modified: cfe/trunk/test/OpenMP/for_reduction_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_reduction_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/for_reduction_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/for_reduction_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -16,7 +16,7 @@ class S2 {
>> public:
>> S2() : a(0) {}
>> S2(S2 &s2) : a(s2.a) {}
>> - static float S2s; // expected-note 2 {{predetermined as shared}}
>> + static float S2s; // expected-note 2 {{static data member is
>> predetermined as shared}}
>> static const float S2sc;
>> };
>> const float S2::S2sc = 0; // expected-note 2 {{'S2sc' defined here}}
>>
>> Modified: cfe/trunk/test/OpenMP/no_option.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/no_option.c?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/no_option.c (original)
>> +++ cfe/trunk/test/OpenMP/no_option.c Thu Jun 19 04:13:45 2014
>> @@ -2,5 +2,5 @@
>> // expected-no-diagnostics
>>
>> int a;
>> -#pragma omp threadprivate(a,b)
>> +#pragma omp threadprivate(a, b)
>> #pragma omp parallel
>>
>> Modified: cfe/trunk/test/OpenMP/no_option_no_warn.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/no_option_no_warn.c?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/no_option_no_warn.c (original)
>> +++ cfe/trunk/test/OpenMP/no_option_no_warn.c Thu Jun 19 04:13:45
>> 2014
>> @@ -2,5 +2,5 @@
>> // expected-no-diagnostics
>>
>> int a;
>> -#pragma omp threadprivate(a,b)
>> +#pragma omp threadprivate(a, b)
>> #pragma omp parallel
>>
>> Modified: cfe/trunk/test/OpenMP/parallel_private_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_private_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/parallel_private_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/parallel_private_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -13,7 +13,7 @@ class S2 {
>> mutable int a;
>> public:
>> S2():a(0) { }
>> - static float S2s; // expected-note {{predetermined as shared}}
>> + static float S2s; // expected-note {{static data member is
>> predetermined as shared}}
>> };
>> const S2 b;
>> const S2 ba[5];
>> @@ -22,9 +22,9 @@ class S3 {
>> public:
>> S3():a(0) { }
>> };
>> -const S3 c; // expected-note {{predetermined as shared}}
>> -const S3 ca[5]; // expected-note {{predetermined as shared}}
>> -extern const int f; // expected-note {{predetermined as shared}}
>> +const S3 c; // expected-note {{global variable is predetermined as
>> shared}}
>> +const S3 ca[5]; // expected-note {{global variable is predetermined
>> as shared}}
>> +extern const int f; // expected-note {{global variable is
>> predetermined as shared}}
>> class S4 { // expected-note {{'S4' declared here}}
>> int a;
>> S4();
>> @@ -42,8 +42,8 @@ int threadvar;
>> #pragma omp threadprivate(threadvar) // expected-note {{defined as
>> threadprivate or thread local}}
>>
>> int main(int argc, char **argv) {
>> - const int d = 5; // expected-note {{predetermined as shared}}
>> - const int da[5] = { 0 }; // expected-note {{predetermined as
>> shared}}
>> + const int d = 5; // expected-note {{constant variable is
>> predetermined as shared}}
>> + const int da[5] = { 0 }; // expected-note {{constant variable is
>> predetermined as shared}}
>> S4 e(4); // expected-note {{'e' defined here}}
>> S5 g(5); // expected-note {{'g' defined here}}
>> int i;
>>
>> Modified: cfe/trunk/test/OpenMP/parallel_reduction_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_reduction_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/parallel_reduction_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/parallel_reduction_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -16,7 +16,7 @@ class S2 {
>> public:
>> S2() : a(0) {}
>> S2(S2 &s2) : a(s2.a) {}
>> - static float S2s; // expected-note 2 {{predetermined as shared}}
>> + static float S2s; // expected-note 2 {{static data member is
>> predetermined as shared}}
>> static const float S2sc;
>> };
>> const float S2::S2sc = 0; // expected-note 2 {{'S2sc' defined here}}
>>
>> Modified: cfe/trunk/test/OpenMP/simd_lastprivate_messages.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/simd_lastprivate_messages.cpp?rev=211262&r1=211261&r2=211262&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/OpenMP/simd_lastprivate_messages.cpp (original)
>> +++ cfe/trunk/test/OpenMP/simd_lastprivate_messages.cpp Thu Jun 19
>> 04:13:45 2014
>> @@ -11,150 +11,198 @@ struct S1; // expected-note 2 {{declared
>> extern S1 a;
>> class S2 {
>> mutable int a;
>> +
>> public:
>> - S2():a(0) { }
>> - S2(S2 &s2):a(s2.a) { }
>> - static float S2s; // expected-note {{predetermined as shared}}
>> + S2() : a(0) {}
>> + S2(S2 &s2) : a(s2.a) {}
>> + static float S2s; // expected-note {{static data member is
>> predetermined as shared}}
>> static const float S2sc;
>> };
>> -const float S2::S2sc = 0; // expected-note {{predetermined as
>> shared}}
>> +const float S2::S2sc = 0; // expected-note {{static data member is
>> predetermined as shared}}
>> const S2 b;
>> const S2 ba[5];
>> class S3 { // expected-note {{'S3' declared here}}
>> int a;
>> - S3& operator =(const S3& s3);
>> + S3 &operator=(const S3 &s3);
>> +
>> public:
>> - S3():a(0) { }
>> - S3(S3 &s3):a(s3.a) { }
>> + S3() : a(0) {}
>> + S3(S3 &s3) : a(s3.a) {}
>> };
>> -const S3 c; // expected-note {{predetermined as shared}}
>> -const S3 ca[5]; // expected-note {{predetermined as shared}}
>> -extern const int f; // expected-note {{predetermined as shared}}
>> -class S4 { // expected-note {{'S4' declared here}}
>> +const S3 c; // expected-note {{global variable is
>> predetermined as shared}}
>> +const S3 ca[5]; // expected-note {{global variable is
>> predetermined as shared}}
>> +extern const int f; // expected-note {{global variable is
>> predetermined as shared}}
>> +class S4 { // expected-note {{'S4' declared here}}
>> int a;
>> S4();
>> S4(const S4 &s4);
>> +
>> public:
>> - S4(int v):a(v) { }
>> + S4(int v) : a(v) {}
>> };
>> class S5 { // expected-note {{'S5' declared here}}
>> int a;
>> - S5():a(0) {}
>> + S5() : a(0) {}
>> +
>> public:
>> - S5(const S5 &s5):a(s5.a) { }
>> - S5(int v):a(v) { }
>> + S5(const S5 &s5) : a(s5.a) {}
>> + S5(int v) : a(v) {}
>> };
>>
>> S3 h;
>> #pragma omp threadprivate(h) // expected-note 2 {{defined as
>> threadprivate or thread local}}
>>
>> -template<class I, class C> int foomain(I argc, C **argv) {
>> +template <class I, class C>
>> +int foomain(I argc, C **argv) {
>> I e(4);
>> I g(5);
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> - #pragma omp simd lastprivate // expected-error {{expected '('
>> after 'lastprivate'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate ( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate () // expected-error {{expected
>> expression}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (argc // expected-error {{expected
>> ')'}} expected-note {{to match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (argc)
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (S1) // expected-error {{'S1' does
>> not refer to a value}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (a, b) // expected-error
>> {{lastprivate variable with incomplete type 'S1'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate (argv[1]) // expected-error
>> {{expected variable name}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate(e, g)
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate(h) // expected-error {{threadprivate
>> or thread local variable cannot be lastprivate}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd firstprivate(i) // expected-error {{unexpected
>> OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp parallel
>> + int &j = i; // expected-note {{'j' defined here}}
>> +#pragma omp simd lastprivate // expected-error {{expected '(' after
>> 'lastprivate'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate() // expected-error {{expected
>> expression}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(argc)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(S1) // expected-error {{'S1' does not
>> refer to a value}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(a, b) // expected-error {{lastprivate
>> variable with incomplete type 'S1'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(argv[1]) // expected-error {{expected
>> variable name}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(e, g)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(h) // expected-error {{threadprivate or
>> thread local variable cannot be lastprivate}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd firstprivate(i) // expected-error {{unexpected
>> OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp parallel
>> {
>> int v = 0;
>> int i;
>> - #pragma omp simd lastprivate(i)
>> - for (int k = 0; k < argc; ++k) { i = k; v += i; }
>> +#pragma omp simd lastprivate(i)
>> + for (int k = 0; k < argc; ++k) {
>> + i = k;
>> + v += i;
>> + }
>> }
>> - #pragma omp parallel shared(i)
>> - #pragma omp parallel private(i)
>> - #pragma omp simd lastprivate (j) // expected-error {{arguments of
>> OpenMP clause 'lastprivate' cannot be of reference type}}
>> - for (int k = 0; k < argc; ++k) ++k;
>> - #pragma omp simd lastprivate(i)
>> - for (int k = 0; k < argc; ++k) ++k;
>> +#pragma omp parallel shared(i)
>> +#pragma omp parallel private(i)
>> +#pragma omp simd lastprivate(j) // expected-error {{arguments of
>> OpenMP clause 'lastprivate' cannot be of reference type}}
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> +#pragma omp simd lastprivate(i)
>> + for (int k = 0; k < argc; ++k)
>> + ++k;
>> return 0;
>> }
>>
>> int main(int argc, char **argv) {
>> - const int d = 5; // expected-note {{predetermined as shared}}
>> - const int da[5] = { 0 }; // expected-note {{predetermined as
>> shared}}
>> - S4 e(4); // expected-note {{'e' defined here}}
>> - S5 g(5); // expected-note {{'g' defined here}}
>> - S3 m; // expected-note {{'m' defined here}}
>> + const int d = 5; // expected-note {{constant variable is
>> predetermined as shared}}
>> + const int da[5] = {0}; // expected-note {{constant variable is
>> predetermined as shared}}
>> + S4 e(4); // expected-note {{'e' defined here}}
>> + S5 g(5); // expected-note {{'g' defined here}}
>> + S3 m; // expected-note {{'m' defined here}}
>> int i;
>> - int &j = i; // expected-note {{'j' defined here}}
>> - #pragma omp simd lastprivate // expected-error {{expected '('
>> after 'lastprivate'}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate ( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate () // expected-error {{expected
>> expression}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (argc // expected-error {{expected
>> ')'}} expected-note {{to match this '('}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (argc)
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (S1) // expected-error {{'S1' does
>> not refer to a value}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (a, b, c, d, f) // expected-error
>> {{lastprivate variable with incomplete type 'S1'}} expected-error 3
>> {{shared variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (argv[1]) // expected-error
>> {{expected variable name}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate (2*2) // expected-error {{expected
>> variable name}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(ba)
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(ca) // expected-error {{shared
>> variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(da) // expected-error {{shared
>> variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> + int &j = i; // expected-note {{'j' defined here}}
>> +#pragma omp simd lastprivate // expected-error {{expected '(' after
>> 'lastprivate'}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate( // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate() // expected-error {{expected
>> expression}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(argc // expected-error {{expected ')'}}
>> expected-note {{to match this '('}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(argc, // expected-error {{expected
>> expression}} expected-error {{expected ')'}} expected-note {{to
>> match this '('}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(argc > 0 ? argv[1] : argv[2]) //
>> expected-error {{expected variable name}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(argc)
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(S1) // expected-error {{'S1' does not
>> refer to a value}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(a, b, c, d, f) // expected-error
>> {{lastprivate variable with incomplete type 'S1'}} expected-error 3
>> {{shared variable cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(argv[1]) // expected-error {{expected
>> variable name}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(2 * 2) // expected-error {{expected
>> variable name}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(ba)
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(ca) // expected-error {{shared variable
>> cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(da) // expected-error {{shared variable
>> cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> int xa;
>> - #pragma omp simd lastprivate(xa) // OK
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(S2::S2s) // expected-error {{shared
>> variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(S2::S2sc) // expected-error {{shared
>> variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd firstprivate (g) // expected-error {{unexpected
>> OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(e, g) // expected-error 2
>> {{lastprivate variable must have an accessible, unambiguous default
>> constructor}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(m) // expected-error {{lastprivate
>> variable must have an accessible, unambiguous copy assignment
>> operator}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(h) // expected-error {{threadprivate
>> or thread local variable cannot be lastprivate}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd private(xa), lastprivate(xa) // expected-error
>> {{private variable cannot be lastprivate}} expected-note {{defined
>> as private}}
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp simd lastprivate(i)
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp parallel private(xa)
>> - #pragma omp simd lastprivate(xa) // OK: may be lastprivate
>> - for (i = 0; i < argc; ++i) foo();
>> - #pragma omp parallel
>> - #pragma omp simd lastprivate(j) // expected-error {{arguments of
>> OpenMP clause 'lastprivate' cannot be of reference type}}
>> - for (i = 0; i < argc; ++i) foo();
>> +#pragma omp simd lastprivate(xa) // OK
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(S2::S2s) // expected-error {{shared
>> variable cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(S2::S2sc) // expected-error {{shared
>> variable cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd firstprivate(g) // expected-error {{unexpected
>> OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(e, g) // expected-error 2 {{lastprivate
>> variable must have an accessible, unambiguous default constructor}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(m) // expected-error {{lastprivate
>> variable must have an accessible, unambiguous copy assignment
>> operator}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(h) // expected-error {{threadprivate or
>> thread local variable cannot be lastprivate}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd private(xa), lastprivate(xa) // expected-error
>> {{private variable cannot be lastprivate}} expected-note {{defined
>> as private}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp simd lastprivate(i)
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp parallel private(xa)
>> +#pragma omp simd lastprivate(xa) // OK: may be lastprivate
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> +#pragma omp parallel
>> +#pragma omp simd lastprivate(j) // expected-error {{arguments of
>> OpenMP clause 'lastprivate' cannot be of reference type}}
>> + for (i = 0; i < argc; ++i)
>> + foo();
>> return 0;
>> }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
More information about the cfe-commits
mailing list