[clang] e8c4842 - [clang][OpenMP][NFC] Move 'allocate' clause modifier parsing into fun… (#115775)

via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 11 16:11:19 PST 2024


Author: David Pagan
Date: 2024-11-11T16:11:16-08:00
New Revision: e8c4842f0ce7a81440e2147a0c9bcc690714a6e5

URL: https://github.com/llvm/llvm-project/commit/e8c4842f0ce7a81440e2147a0c9bcc690714a6e5
DIFF: https://github.com/llvm/llvm-project/commit/e8c4842f0ce7a81440e2147a0c9bcc690714a6e5.diff

LOG: [clang][OpenMP][NFC] Move 'allocate' clause modifier parsing into fun… (#115775)

…ction

Parsing of 'allocate' clause modifier ('allocator') has been moved into
a separate function in anticipation of adding another modifier
('align').

Added: 
    

Modified: 
    clang/lib/Parse/ParseOpenMP.cpp

Removed: 
    


################################################################################
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);


        


More information about the cfe-commits mailing list