diff options
Diffstat (limited to 'flang/include/flang/Parser/parse-tree.h')
-rw-r--r-- | flang/include/flang/Parser/parse-tree.h | 34 |
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; }; |