r211262 - [OPENMP] Improved diagnostic messages for vars with the predetermined data sharing attributes and reformatting
Hal Finkel
hfinkel at anl.gov
Thu Jun 19 02:26:49 PDT 2014
----- 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
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the cfe-commits
mailing list