-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang][OpenMP][NFC] Move 'allocate' clause modifier parsing into fun… #115775
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
Conversation
…ction Parsing of 'allocate' clause modifier ('allocator') has been moved into a separate function in anticipation of adding another modifier ('align').
@llvm/pr-subscribers-clang Author: David Pagan (ddpagan) Changes…ction Parsing of 'allocate' clause modifier ('allocator') has been moved into a separate function in anticipation of adding another modifier ('align'). Full diff: https://github.com/llvm/llvm-project/pull/115775.diff 1 Files Affected:
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 59a33eafa6be4f..c253133f611b0b 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -4519,6 +4519,36 @@ static bool parseStepSize(Parser &P, SemaOpenMP::OpenMPVarListDataTy &Data,
return false;
}
+/// Parse 'allocate' clause modifiers.
+/// If allocator-modifier exists, return an expression for it and set
+/// Data field noting modifier was specified.
+///
+static ExprResult
+parseOpenMPAllocateClauseModifiers(Parser &P, OpenMPClauseKind Kind,
+ SemaOpenMP::OpenMPVarListDataTy &Data) {
+ const Token &Tok = P.getCurToken();
+ Preprocessor &PP = P.getPreprocessor();
+ ExprResult Tail;
+ auto Modifier = static_cast<OpenMPAllocateClauseModifier>(
+ getOpenMPSimpleClauseType(Kind, PP.getSpelling(Tok), P.getLangOpts()));
+ if (Modifier == OMPC_ALLOCATE_allocator) {
+ Data.AllocClauseModifier = Modifier;
+ P.ConsumeToken();
+ BalancedDelimiterTracker AllocateT(P, tok::l_paren,
+ tok::annot_pragma_openmp_end);
+ if (Tok.is(tok::l_paren)) {
+ AllocateT.consumeOpen();
+ Tail = P.ParseAssignmentExpression();
+ AllocateT.consumeClose();
+ } else {
+ P.Diag(Tok, diag::err_expected) << tok::l_paren;
+ }
+ } else {
+ Tail = P.ParseAssignmentExpression();
+ }
+ return Tail;
+}
+
/// Parses clauses with list.
bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
OpenMPClauseKind Kind,
@@ -4800,23 +4830,7 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
// iterator(iterators-definition)
ExprResult Tail;
if (Kind == OMPC_allocate) {
- auto Modifier = static_cast<OpenMPAllocateClauseModifier>(
- getOpenMPSimpleClauseType(Kind, PP.getSpelling(Tok), getLangOpts()));
- if (Modifier == OMPC_ALLOCATE_allocator) {
- Data.AllocClauseModifier = Modifier;
- ConsumeToken();
- BalancedDelimiterTracker AllocateT(*this, tok::l_paren,
- tok::annot_pragma_openmp_end);
- if (Tok.is(tok::l_paren)) {
- AllocateT.consumeOpen();
- Tail = ParseAssignmentExpression();
- AllocateT.consumeClose();
- } else {
- Diag(Tok, diag::err_expected) << tok::l_paren;
- }
- } else {
- Tail = ParseAssignmentExpression();
- }
+ Tail = parseOpenMPAllocateClauseModifiers(*this, Kind, Data);
} else {
HasIterator = true;
EnterScope(Scope::OpenMPDirectiveScope | Scope::DeclScope);
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/131/builds/10173 Here is the relevant piece of the build log for the reference
|
llvm#115775) …ction Parsing of 'allocate' clause modifier ('allocator') has been moved into a separate function in anticipation of adding another modifier ('align').
…ction
Parsing of 'allocate' clause modifier ('allocator') has been moved into a separate function in anticipation of adding another modifier ('align').