[clang] [OpenMP 6.0] Parse/Sema support for reduction over private variable with reduction clause. (PR #129938)
CHANDRA GHALE via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 10 08:41:30 PDT 2025
================
@@ -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
More information about the cfe-commits
mailing list