Author: abataev Date: Fri Jul 6 12:35:42 2018 New Revision: 336460 URL: http://llvm.org/viewvc/llvm-project?rev=336460&view=rev Log: [OPENMP] Make clauses closing loc point to right bracket.
For some of the clauses the closing location erroneously points to the beginning of the next clause rather than on the location of the closing bracket of the clause. Modified: cfe/trunk/include/clang/Parse/Parser.h cfe/trunk/lib/Parse/ParseOpenMP.cpp cfe/trunk/test/OpenMP/dump.cpp Modified: cfe/trunk/include/clang/Parse/Parser.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=336460&r1=336459&r2=336460&view=diff ============================================================================== --- cfe/trunk/include/clang/Parse/Parser.h (original) +++ cfe/trunk/include/clang/Parse/Parser.h Fri Jul 6 12:35:42 2018 @@ -2822,6 +2822,7 @@ public: struct OpenMPVarListDataTy { Expr *TailExpr = nullptr; SourceLocation ColonLoc; + SourceLocation RLoc; CXXScopeSpec ReductionIdScopeSpec; DeclarationNameInfo ReductionId; OpenMPDependClauseKind DepKind = OMPC_DEPEND_unknown; Modified: cfe/trunk/lib/Parse/ParseOpenMP.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseOpenMP.cpp?rev=336460&r1=336459&r2=336460&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseOpenMP.cpp (original) +++ cfe/trunk/lib/Parse/ParseOpenMP.cpp Fri Jul 6 12:35:42 2018 @@ -424,13 +424,15 @@ void Parser::ParseOpenMPReductionInitial SkipUntil(tok::r_paren, tok::annot_pragma_openmp_end, StopBeforeMatch); } else { // Match the ')'. - T.consumeClose(); + SourceLocation RLoc = Tok.getLocation(); + if (!T.consumeClose()) + RLoc = T.getCloseLocation(); assert(!Exprs.empty() && Exprs.size() - 1 == CommaLocs.size() && "Unexpected number of commas!"); - ExprResult Initializer = Actions.ActOnParenListExpr( - T.getOpenLocation(), T.getCloseLocation(), Exprs); + ExprResult Initializer = + Actions.ActOnParenListExpr(T.getOpenLocation(), RLoc, Exprs); Actions.AddInitializerToDecl(OmpPrivParm, Initializer.get(), /*DirectInit=*/true); } @@ -1378,9 +1380,10 @@ ExprResult Parser::ParseOpenMPParensExpr Val = Actions.ActOnFinishFullExpr(Val.get(), ELoc); // Parse ')'. - T.consumeClose(); + RLoc = Tok.getLocation(); + if (!T.consumeClose()) + RLoc = T.getCloseLocation(); - RLoc = T.getCloseLocation(); return Val; } @@ -1457,12 +1460,13 @@ OMPClause *Parser::ParseOpenMPSimpleClau ConsumeAnyToken(); // Parse ')'. - T.consumeClose(); + SourceLocation RLoc = Tok.getLocation(); + if (!T.consumeClose()) + RLoc = T.getCloseLocation(); if (ParseOnly) return nullptr; - return Actions.ActOnOpenMPSimpleClause(Kind, Type, TypeLoc, LOpen, Loc, - Tok.getLocation()); + return Actions.ActOnOpenMPSimpleClause(Kind, Type, TypeLoc, LOpen, Loc, RLoc); } /// Parsing of OpenMP clauses like 'ordered'. @@ -1633,7 +1637,9 @@ OMPClause *Parser::ParseOpenMPSingleExpr } // Parse ')'. - T.consumeClose(); + SourceLocation RLoc = Tok.getLocation(); + if (!T.consumeClose()) + RLoc = T.getCloseLocation(); if (NeedAnExpression && Val.isInvalid()) return nullptr; @@ -1641,8 +1647,7 @@ OMPClause *Parser::ParseOpenMPSingleExpr if (ParseOnly) return nullptr; return Actions.ActOnOpenMPSingleExprWithArgClause( - Kind, Arg, Val.get(), Loc, T.getOpenLocation(), KLoc, DelimLoc, - T.getCloseLocation()); + Kind, Arg, Val.get(), Loc, T.getOpenLocation(), KLoc, DelimLoc, RLoc); } static bool ParseReductionId(Parser &P, CXXScopeSpec &ReductionIdScopeSpec, @@ -1914,7 +1919,9 @@ bool Parser::ParseOpenMPVarList(OpenMPDi } // Parse ')'. - T.consumeClose(); + Data.RLoc = Tok.getLocation(); + if (!T.consumeClose()) + Data.RLoc = T.getCloseLocation(); return (Kind == OMPC_depend && Data.DepKind != OMPC_DEPEND_unknown && Vars.empty()) || (Kind != OMPC_depend && Kind != OMPC_map && Vars.empty()) || @@ -1979,7 +1986,7 @@ OMPClause *Parser::ParseOpenMPVarListCla if (ParseOnly) return nullptr; return Actions.ActOnOpenMPVarListClause( - Kind, Vars, Data.TailExpr, Loc, LOpen, Data.ColonLoc, Tok.getLocation(), + Kind, Vars, Data.TailExpr, Loc, LOpen, Data.ColonLoc, Data.RLoc, Data.ReductionIdScopeSpec, Data.ReductionId, Data.DepKind, Data.LinKind, Data.MapTypeModifier, Data.MapType, Data.IsMapTypeImplicit, Data.DepLinMapLoc); Modified: cfe/trunk/test/OpenMP/dump.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/dump.cpp?rev=336460&r1=336459&r2=336460&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/dump.cpp (original) +++ cfe/trunk/test/OpenMP/dump.cpp Fri Jul 6 12:35:42 2018 @@ -44,10 +44,10 @@ struct S { }; // CHECK: | `-OMPParallelForDirective {{.+}} {{<line:40:9, col:80>|<col:9, col:80>}} -// CHECK-NEXT: | |-OMPDefaultClause {{.+}} <col:26, col:40> -// CHECK-NEXT: | |-OMPPrivateClause {{.+}} <col:40, col:51> +// CHECK-NEXT: | |-OMPDefaultClause {{.+}} <col:26, col:38> +// CHECK-NEXT: | |-OMPPrivateClause {{.+}} <col:40, col:49> // CHECK-NEXT: | | `-DeclRefExpr {{.+}} <col:48> 'int' lvalue OMPCapturedExpr {{.+}} 'a' 'int &' -// CHECK-NEXT: | |-OMPSharedClause {{.+}} <col:51, col:61> +// CHECK-NEXT: | |-OMPSharedClause {{.+}} <col:51, col:59> // CHECK-NEXT: | | `-MemberExpr {{.+}} <col:58> 'int' lvalue ->b // CHECK-NEXT: | | `-CXXThisExpr {{.+}} <col:58> 'S *' this // CHECK-NEXT: | |-OMPScheduleClause {{.+}} <col:61, col:79> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits