@@ -3457,6 +3457,14 @@ inline namespace modifier {
34573457// ENUM_CLASS(Value, Keyword1, Keyword2);
34583458// };
34593459
3460+ // Ref: [4.5:72-81], [5.0:110-119], [5.1:134-143], [5.2:169-170]
3461+ //
3462+ // alignment ->
3463+ // scalar-integer-expression // since 4.5
3464+ struct OmpAlignment {
3465+ WRAPPER_CLASS_BOILERPLATE (OmpAlignment, ScalarIntExpr);
3466+ };
3467+
34603468// Ref: [5.1:184-185], [5.2:178-179]
34613469//
34623470// align-modifier ->
@@ -3526,6 +3534,15 @@ struct OmpDependenceType {
35263534 WRAPPER_CLASS_BOILERPLATE (OmpDependenceType, Value);
35273535};
35283536
3537+ // Ref: [5.0:170-176], [5.1:197-205], [5.2:276-277]
3538+ //
3539+ // device-modifier ->
3540+ // ANCESTOR | DEVICE_NUM // since 5.0
3541+ struct OmpDeviceModifier {
3542+ ENUM_CLASS (Value, Ancestor, Device_Num)
3543+ WRAPPER_CLASS_BOILERPLATE (OmpDeviceModifier, Value);
3544+ };
3545+
35293546// Ref: [5.1:205-209], [5.2:166-168]
35303547//
35313548// motion-modifier ->
@@ -3656,18 +3673,26 @@ struct OmpVariableCategory {
36563673
36573674// --- Clauses
36583675
3659- // OMP 5.0 2.10.1 affinity([aff-modifier:] locator-list)
3660- // aff-modifier: interator-modifier
3676+ // Ref: [5.0:135-140], [5.1:161-166], [5.2:264-265]
3677+ //
3678+ // affinity-clause ->
3679+ // AFFINITY([aff-modifier:] locator-list) // since 5.0
3680+ // aff-modifier ->
3681+ // interator-modifier // since 5.0
36613682struct OmpAffinityClause {
36623683 TUPLE_CLASS_BOILERPLATE (OmpAffinityClause);
3663- std::tuple<std::optional<OmpIterator>, OmpObjectList> t;
3684+ MODIFIER_BOILERPLATE (OmpIterator);
3685+ std::tuple<MODIFIERS(), OmpObjectList> t;
36643686};
36653687
3666- // 2.8.1 aligned-clause -> ALIGNED (variable-name-list[ : scalar-constant])
3688+ // Ref: [4.5:72-81], [5.0:110-119], [5.1:134-143], [5.2:169-170]
3689+ //
3690+ // aligned-clause ->
3691+ // ALIGNED(list [: alignment]) // since 4.5
36673692struct OmpAlignedClause {
36683693 TUPLE_CLASS_BOILERPLATE (OmpAlignedClause);
3669- CharBlock source ;
3670- std::tuple<OmpObjectList, std::optional<ScalarIntConstantExpr> > t;
3694+ MODIFIER_BOILERPLATE (OmpAlignment) ;
3695+ std::tuple<OmpObjectList, MODIFIERS() > t;
36713696};
36723697
36733698// Ref: [5.0:158-159], [5.1:184-185], [5.2:178-179]
@@ -3806,8 +3831,8 @@ WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
38063831// Ref: [5.0:254-255], [5.1:287-288], [5.2:73]
38073832//
38083833// destroy-clause ->
3809- // DESTROY | // since 5.0, until 5.2
3810- // DESTROY(variable) // since 5.2
3834+ // DESTROY | // since 5.0, until 5.1
3835+ // DESTROY(variable) // since 5.2
38113836WRAPPER_CLASS (OmpDestroyClause, OmpObject);
38123837
38133838// Ref: [5.0:135-140], [5.1:161-166], [5.2:265-266]
@@ -3826,8 +3851,8 @@ struct OmpDetachClause {
38263851// scalar-integer-expression) // since 5.0
38273852struct OmpDeviceClause {
38283853 TUPLE_CLASS_BOILERPLATE (OmpDeviceClause);
3829- ENUM_CLASS (DeviceModifier, Ancestor, Device_Num)
3830- std::tuple<std::optional<DeviceModifier> , ScalarIntExpr> t;
3854+ MODIFIER_BOILERPLATE (OmpDeviceModifier);
3855+ std::tuple<MODIFIERS() , ScalarIntExpr> t;
38313856};
38323857
38333858// Ref: [5.0:180-185], [5.1:210-216], [5.2:275]
0 commit comments