-
Notifications
You must be signed in to change notification settings - Fork 13.3k
default clause replaced by otherwise clause for metadirective in OpenMP 5.2 #128640
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
6ebd599
5efa687
a3a8a41
185a9ad
24fe1cf
44a2539
f1b974c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1660,6 +1660,10 @@ def err_omp_expected_colon : Error<"missing ':' in %0">; | |
def err_omp_missing_comma : Error< "missing ',' after %0">; | ||
def err_omp_expected_context_selector | ||
: Error<"expected valid context selector in %0">; | ||
def err_omp_unknown_clause | ||
: Error<"unknown clause '%0' in %1">; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We already have a message for a wrong clause for a directive: |
||
def warn_omp_default_deprecated : Warning<"'default' clause for" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use err_omp_deprecate_old_syntax There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since default is being deprecated not disallowed in metadirective I had put a warning instead on using an error (err_omp_deprecate_old_syntax). |
||
" 'metadirective' is deprecated; use 'otherwise' instead">, InGroup<Deprecated>; | ||
def err_omp_requires_out_inout_depend_type : Error< | ||
"reserved locator 'omp_all_memory' requires 'out' or 'inout' " | ||
"dependency types">; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2759,6 +2759,19 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( | |
OpenMPClauseKind CKind = Tok.isAnnotation() | ||
? OMPC_unknown | ||
: getOpenMPClauseKind(PP.getSpelling(Tok)); | ||
// Check if the clause is unrecognized. | ||
if (getLangOpts().OpenMP < 52 && | ||
(CKind == OMPC_unknown || CKind == OMPC_otherwise)) { | ||
Diag(Tok, diag::err_omp_unknown_clause) | ||
<< PP.getSpelling(Tok) << "metadirective"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Error message does not accept any parameters |
||
} | ||
if (getLangOpts().OpenMP >= 52 && CKind == OMPC_unknown) { | ||
Diag(Tok, diag::err_omp_unknown_clause) | ||
<< PP.getSpelling(Tok) << "metadirective"; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please treat OMPC_unknown and OMPC_otherwise separately: in the former case the message should be something like "expected an OpenMP clause" (see There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @kparzysz I have made the requested modifications to the code based on your suggestions. Please review it and provide your feedback. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ping @kparzysz There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ping @kparzysz |
||
if (CKind == OMPC_default && getLangOpts().OpenMP >= 52) { | ||
Diag(Tok, diag::warn_omp_default_deprecated); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Drop braces |
||
SourceLocation Loc = ConsumeToken(); | ||
|
||
// Parse '('. | ||
|
@@ -2785,6 +2798,13 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( | |
return Directive; | ||
} | ||
} | ||
if (CKind == OMPC_otherwise) { | ||
// Check for 'otherwise' keyword. | ||
if (Tok.is(tok::identifier) && | ||
Tok.getIdentifierInfo()->getName() == "otherwise") { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why need to double check here? |
||
ConsumeToken(); // Consume 'otherwise' | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Drop braces |
||
} | ||
// Skip Directive for now. We will parse directive in the second iteration | ||
int paren = 0; | ||
while (Tok.isNot(tok::r_paren) || paren != 0) { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use err_omp_expected_clause instead
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the suggestion. I've already used
err_omp_unexpected_clause
for theOMPC_otherwise
case in OpenMP versions prior to 5.2, as suggested earlier. ForOMPC_unknown
, I'm usingerr_omp_unknown_clause
, which aligns with the guidance to treatOMPC_unknown
andOMPC_otherwise
separately.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is wrong. If the wrong clause is used, it should be reported automatically. If none was specified, err_omp_expected_clause should be used