Skip to content

Commit 2c6a741

Browse files
authored
Merge branch 'users/kparzysz/spr/m02-selectors' into users/kparzysz/spr/m03-meta-simple
2 parents 9a07a37 + d6ca30b commit 2c6a741

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

flang/include/flang/Parser/parse-tree.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3489,12 +3489,14 @@ inline namespace traits {
34893489
// trait-property-name ->
34903490
// identifier | string-literal
34913491
struct OmpTraitPropertyName {
3492+
CharBlock source;
34923493
WRAPPER_CLASS_BOILERPLATE(OmpTraitPropertyName, std::string);
34933494
};
34943495

34953496
// trait-score ->
34963497
// SCORE(non-negative-const-integer-expression)
34973498
struct OmpTraitScore {
3499+
CharBlock source;
34983500
WRAPPER_CLASS_BOILERPLATE(OmpTraitScore, ScalarIntExpr);
34993501
};
35003502

@@ -3519,8 +3521,10 @@ struct OmpTraitScore {
35193521
// constant integer expression <- conflict with (b)
35203522
//
35213523
struct OmpTraitPropertyExtension {
3524+
CharBlock source;
35223525
TUPLE_CLASS_BOILERPLATE(OmpTraitPropertyExtension);
35233526
struct ExtensionValue {
3527+
CharBlock source;
35243528
UNION_CLASS_BOILERPLATE(ExtensionValue);
35253529
std::variant<OmpTraitPropertyName, ScalarExpr,
35263530
common::Indirection<OmpTraitPropertyExtension>>
@@ -3541,6 +3545,7 @@ struct OmpTraitPropertyExtension {
35413545
// will happen if the scalar integer expression sees a logical expresion.
35423546
// To avoid this, parse all expressions as scalar expressions.
35433547
struct OmpTraitProperty {
3548+
CharBlock source;
35443549
UNION_CLASS_BOILERPLATE(OmpTraitProperty);
35453550
std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
35463551
ScalarExpr, // trait-property-expresion
@@ -3566,6 +3571,7 @@ struct OmpTraitProperty {
35663571
// Trait-set-selectors:
35673572
// [D]evice, [T]arget_device, [C]onstruct, [I]mplementation, [U]ser.
35683573
struct OmpTraitSelectorName {
3574+
CharBlock source;
35693575
UNION_CLASS_BOILERPLATE(OmpTraitSelectorName);
35703576
ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
35713577
Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
@@ -3576,6 +3582,7 @@ struct OmpTraitSelectorName {
35763582
// trait-selector-name |
35773583
// trait-selector-name ([trait-score:] trait-property, ...)
35783584
struct OmpTraitSelector {
3585+
CharBlock source;
35793586
TUPLE_CLASS_BOILERPLATE(OmpTraitSelector);
35803587
struct Properties {
35813588
TUPLE_CLASS_BOILERPLATE(Properties);
@@ -3588,20 +3595,23 @@ struct OmpTraitSelector {
35883595
// CONSTRUCT | DEVICE | IMPLEMENTATION | USER | // since 5.0
35893596
// TARGET_DEVICE // since 5.1
35903597
struct OmpTraitSetSelectorName {
3598+
CharBlock source;
35913599
ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
35923600
WRAPPER_CLASS_BOILERPLATE(OmpTraitSetSelectorName, Value);
35933601
};
35943602

35953603
// trait-set-selector ->
35963604
// trait-set-selector-name = {trait-selector, ...}
35973605
struct OmpTraitSetSelector {
3606+
CharBlock source;
35983607
TUPLE_CLASS_BOILERPLATE(OmpTraitSetSelector);
35993608
std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
36003609
};
36013610

36023611
// context-selector-specification ->
36033612
// trait-set-selector, ...
36043613
struct OmpContextSelectorSpecification { // Modifier
3614+
CharBlock source;
36053615
WRAPPER_CLASS_BOILERPLATE(
36063616
OmpContextSelectorSpecification, std::list<OmpTraitSetSelector>);
36073617
};

flang/lib/Parser/openmp-parsers.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -158,32 +158,32 @@ TYPE_PARSER(sourced(construct<OmpDirectiveSpecification>(
158158

159159
// --- Parsers for context traits -------------------------------------
160160

161-
TYPE_PARSER(construct<OmpTraitPropertyName>( //
161+
TYPE_PARSER(sourced(construct<OmpTraitPropertyName>( //
162162
(space >> charLiteralConstantWithoutKind) ||
163-
applyMem(&Name::ToString, Parser<Name>{})))
163+
applyMem(&Name::ToString, Parser<Name>{}))))
164164

165-
TYPE_PARSER(construct<OmpTraitScore>( //
166-
"SCORE" >> parenthesized(scalarIntExpr)))
165+
TYPE_PARSER(sourced(construct<OmpTraitScore>( //
166+
"SCORE" >> parenthesized(scalarIntExpr))))
167167

168-
TYPE_PARSER(construct<OmpTraitPropertyExtension::ExtensionValue>(
168+
TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension::ExtensionValue>(
169169
// Parse nested extension first.
170170
construct<OmpTraitPropertyExtension::ExtensionValue>(
171171
indirect(Parser<OmpTraitPropertyExtension>{})) ||
172172
construct<OmpTraitPropertyExtension::ExtensionValue>(
173173
Parser<OmpTraitPropertyName>{}) ||
174-
construct<OmpTraitPropertyExtension::ExtensionValue>(scalarExpr)))
174+
construct<OmpTraitPropertyExtension::ExtensionValue>(scalarExpr))))
175175

176-
TYPE_PARSER(construct<OmpTraitPropertyExtension>( //
176+
TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension>( //
177177
Parser<OmpTraitPropertyName>{},
178178
parenthesized(nonemptySeparated(
179-
Parser<OmpTraitPropertyExtension::ExtensionValue>{}, ","_tok))))
179+
Parser<OmpTraitPropertyExtension::ExtensionValue>{}, ","_tok)))))
180180

181-
TYPE_PARSER(construct<OmpTraitProperty>(
182-
// Try extension first, before OmpTraitPropertyName.
181+
TYPE_PARSER(sourced(construct<OmpTraitProperty>(
182+
// Try clause first, then extension before OmpTraitPropertyName.
183+
construct<OmpTraitProperty>(indirect(Parser<OmpClause>{})) ||
183184
construct<OmpTraitProperty>(Parser<OmpTraitPropertyExtension>{}) ||
184185
construct<OmpTraitProperty>(Parser<OmpTraitPropertyName>{}) ||
185-
construct<OmpTraitProperty>(indirect(Parser<OmpClause>{})) ||
186-
construct<OmpTraitProperty>(scalarExpr)))
186+
construct<OmpTraitProperty>(scalarExpr))))
187187

188188
TYPE_PARSER(construct<OmpTraitSelectorName::Value>(
189189
"ARCH" >> pure(OmpTraitSelectorName::Value::Arch) ||
@@ -199,18 +199,18 @@ TYPE_PARSER(construct<OmpTraitSelectorName::Value>(
199199
"UID" >> pure(OmpTraitSelectorName::Value::Uid) ||
200200
"VENDOR" >> pure(OmpTraitSelectorName::Value::Vendor)))
201201

202-
TYPE_PARSER(construct<OmpTraitSelectorName>(
202+
TYPE_PARSER(sourced(construct<OmpTraitSelectorName>(
203203
// Parse predefined names first (because of SIMD).
204204
construct<OmpTraitSelectorName>(Parser<OmpTraitSelectorName::Value>{}) ||
205-
construct<OmpTraitSelectorName>(OmpDirectiveNameParser{})))
205+
construct<OmpTraitSelectorName>(OmpDirectiveNameParser{}))))
206206

207207
TYPE_PARSER(construct<OmpTraitSelector::Properties>(
208208
maybe(Parser<OmpTraitScore>{} / ":"_tok),
209209
nonemptySeparated(Parser<OmpTraitProperty>{}, ","_tok)))
210210

211-
TYPE_PARSER(construct<OmpTraitSelector>( //
211+
TYPE_PARSER(sourced(construct<OmpTraitSelector>( //
212212
Parser<OmpTraitSelectorName>{}, //
213-
maybe(parenthesized(Parser<OmpTraitSelector::Properties>{}))))
213+
maybe(parenthesized(Parser<OmpTraitSelector::Properties>{})))))
214214

215215
TYPE_PARSER(construct<OmpTraitSetSelectorName::Value>(
216216
"CONSTRUCT" >> pure(OmpTraitSetSelectorName::Value::Construct) ||
@@ -219,15 +219,15 @@ TYPE_PARSER(construct<OmpTraitSetSelectorName::Value>(
219219
"TARGET_DEVICE" >> pure(OmpTraitSetSelectorName::Value::Target_Device) ||
220220
"USER" >> pure(OmpTraitSetSelectorName::Value::User)))
221221

222-
TYPE_PARSER(construct<OmpTraitSetSelectorName>(
223-
Parser<OmpTraitSetSelectorName::Value>{}))
222+
TYPE_PARSER(sourced(construct<OmpTraitSetSelectorName>(
223+
Parser<OmpTraitSetSelectorName::Value>{})))
224224

225-
TYPE_PARSER(construct<OmpTraitSetSelector>( //
225+
TYPE_PARSER(sourced(construct<OmpTraitSetSelector>( //
226226
Parser<OmpTraitSetSelectorName>{},
227-
"=" >> braced(nonemptySeparated(Parser<OmpTraitSelector>{}, ","_tok))))
227+
"=" >> braced(nonemptySeparated(Parser<OmpTraitSelector>{}, ","_tok)))))
228228

229-
TYPE_PARSER(construct<OmpContextSelectorSpecification>(
230-
nonemptySeparated(Parser<OmpTraitSetSelector>{}, ","_tok)))
229+
TYPE_PARSER(sourced(construct<OmpContextSelectorSpecification>(
230+
nonemptySeparated(Parser<OmpTraitSetSelector>{}, ","_tok))))
231231

232232
// Parser<OmpContextSelector> == Parser<traits::OmpContextSelectorSpecification>
233233

0 commit comments

Comments
 (0)