================ @@ -4668,6 +4668,34 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, assert(Tok.is(tok::comma) && "Expected comma."); (void)ConsumeToken(); } + // Handle original(private / shared) Modifier + if (Kind == OMPC_reduction && getLangOpts().OpenMP >= 60 && + Tok.is(tok::identifier) && PP.getSpelling(Tok) == "original" && + NextToken().is(tok::l_paren)) { + // Parse original(private) modifier. + ConsumeToken(); + BalancedDelimiterTracker ParenT(*this, tok::l_paren, tok::r_paren); + ParenT.consumeOpen(); + if (Tok.is(tok::kw_private)) { + Data.OriginalSharingModifier = OMPC_ORIGINAL_SHARING_private; + Data.OriginalSharingModifierLoc = Tok.getLocation(); + ConsumeToken(); + } else if (Tok.is(tok::identifier) && + (PP.getSpelling(Tok) == "shared" || + PP.getSpelling(Tok) == "default")) { + Data.OriginalSharingModifier = OMPC_ORIGINAL_SHARING_shared; + Data.OriginalSharingModifierLoc = Tok.getLocation(); + ConsumeToken(); + } else { + Diag(Tok.getLocation(), diag::err_expected) + << "'private or shared or default'"; + SkipUntil(tok::r_paren); + return false; + } + ParenT.consumeClose(); + assert(Tok.is(tok::comma) && "Expected comma."); + (void)ConsumeToken(); + } ---------------- chandraghale wrote:
@alexey-bataev "I'm sorry, I didn't understand your comment. The changes are made to consume the newly added original-sharing-modifier [OpenMP 6.0 7.6.10] For example: ``` #pragma omp parallel reduction(original(private), +: x) #pragma omp parallel reduction(original(shared), *: y) ``` Isn't it necessary for the parser to recognize the original(...) syntax and record the modifier? I suppose DSAStack does not natively handle this modifier." https://github.com/llvm/llvm-project/pull/129938 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits