summaryrefslogtreecommitdiff
path: root/flang/include/flang/Parser/parse-tree.h
diff options
context:
space:
mode:
Diffstat (limited to 'flang/include/flang/Parser/parse-tree.h')
-rw-r--r--flang/include/flang/Parser/parse-tree.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index d729f444ef95..9059cfbe7f8c 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3482,10 +3482,23 @@ struct OmpInReductionClause {
};
// OMP 5.0 2.11.4 allocate-clause -> ALLOCATE ([allocator:] variable-name-list)
+// OMP 5.2 2.13.4 allocate-clause -> ALLOCATE ([allocate-modifier [,
+// allocate-modifier] :]
+// variable-name-list)
+// allocate-modifier -> allocator | align
struct OmpAllocateClause {
TUPLE_CLASS_BOILERPLATE(OmpAllocateClause);
- WRAPPER_CLASS(Allocator, ScalarIntExpr);
- std::tuple<std::optional<Allocator>, OmpObjectList> t;
+ struct AllocateModifier {
+ UNION_CLASS_BOILERPLATE(AllocateModifier);
+ WRAPPER_CLASS(Allocator, ScalarIntExpr);
+ WRAPPER_CLASS(Align, ScalarIntExpr);
+ struct ComplexModifier {
+ TUPLE_CLASS_BOILERPLATE(ComplexModifier);
+ std::tuple<Allocator, Align> t;
+ };
+ std::variant<Allocator, ComplexModifier, Align> u;
+ };
+ std::tuple<std::optional<AllocateModifier>, OmpObjectList> t;
};
// 2.13.9 depend-vec-length -> +/- non-negative-constant
@@ -3703,6 +3716,20 @@ struct OpenMPExecutableAllocate {
t;
};
+EMPTY_CLASS(OmpEndAllocators);
+
+// 6.7 Allocators construct [OpenMP 5.2]
+// allocators-construct -> ALLOCATORS [allocate-clause [,]]
+// allocate-stmt
+// [omp-end-allocators-construct]
+struct OpenMPAllocatorsConstruct {
+ TUPLE_CLASS_BOILERPLATE(OpenMPAllocatorsConstruct);
+ CharBlock source;
+ std::tuple<Verbatim, OmpClauseList, Statement<AllocateStmt>,
+ std::optional<OmpEndAllocators>>
+ t;
+};
+
// 2.17.7 Atomic construct/2.17.8 Flush construct [OpenMP 5.0]
// memory-order-clause -> acq_rel
// release
@@ -3889,7 +3916,8 @@ struct OpenMPConstruct {
std::variant<OpenMPStandaloneConstruct, OpenMPSectionsConstruct,
OpenMPSectionConstruct, OpenMPLoopConstruct, OpenMPBlockConstruct,
OpenMPAtomicConstruct, OpenMPDeclarativeAllocate,
- OpenMPExecutableAllocate, OpenMPCriticalConstruct>
+ OpenMPExecutableAllocate, OpenMPAllocatorsConstruct,
+ OpenMPCriticalConstruct>
u;
};