File tree Expand file tree Collapse file tree 3 files changed +21
-3
lines changed Expand file tree Collapse file tree 3 files changed +21
-3
lines changed Original file line number Diff line number Diff line change @@ -214,6 +214,11 @@ class AssociatedLoopChecker {
214
214
};
215
215
216
216
bool OmpStructureChecker::CheckAllowedClause (llvmOmpClause clause) {
217
+ // Do not do clause checks while processing METADIRECTIVE.
218
+ if (GetDirectiveNest (ContextSelectorNest) > 0 ) {
219
+ return true ;
220
+ }
221
+
217
222
unsigned version{context_.langOptions ().OpenMPVersion };
218
223
DirectiveContext &dirCtx = GetContext ();
219
224
llvm::omp::Directive dir{dirCtx.directive };
@@ -4458,6 +4463,14 @@ void OmpStructureChecker::Enter(const parser::OmpClause::OmpxBare &x) {
4458
4463
}
4459
4464
}
4460
4465
4466
+ void OmpStructureChecker::Enter (const parser::OmpContextSelector &ctxSel) {
4467
+ EnterDirectiveNest (ContextSelectorNest);
4468
+ }
4469
+
4470
+ void OmpStructureChecker::Leave (const parser::OmpContextSelector &) {
4471
+ ExitDirectiveNest (ContextSelectorNest);
4472
+ }
4473
+
4461
4474
llvm::StringRef OmpStructureChecker::getClauseName (llvm::omp::Clause clause) {
4462
4475
return llvm::omp::getOpenMPClauseName (clause);
4463
4476
}
Original file line number Diff line number Diff line change @@ -150,6 +150,9 @@ class OmpStructureChecker
150
150
void Enter (const parser::OmpMetadirectiveDirective &);
151
151
void Leave (const parser::OmpMetadirectiveDirective &);
152
152
153
+ void Enter (const parser::OmpContextSelector &);
154
+ void Leave (const parser::OmpContextSelector &);
155
+
153
156
#define GEN_FLANG_CLAUSE_CHECK_ENTER
154
157
#include " llvm/Frontend/OpenMP/OMP.inc"
155
158
@@ -286,7 +289,8 @@ class OmpStructureChecker
286
289
TargetBlockOnlyTeams,
287
290
TargetNest,
288
291
DeclarativeNest,
289
- LastType = DeclarativeNest,
292
+ ContextSelectorNest,
293
+ LastType = ContextSelectorNest,
290
294
};
291
295
int directiveNest_[LastType + 1 ] = {0 };
292
296
Original file line number Diff line number Diff line change @@ -83,13 +83,13 @@ subroutine f30
83
83
! PARSE-TREE: | | | OmpTraitSelector
84
84
! PARSE-TREE: | | | | OmpTraitSelectorName -> Value = Atomic_Default_Mem_Order
85
85
! PARSE-TREE: | | | | Properties
86
- ! PARSE-TREE: | | | | | OmpTraitProperty -> OmpTraitPropertyName -> string = 'acq_rel'
86
+ ! PARSE-TREE: | | | | | OmpTraitProperty -> OmpClause -> AcqRel
87
87
! PARSE-TREE: | | OmpDirectiveSpecification
88
88
! PARSE-TREE: | | | llvm::omp::Directive = nothing
89
89
! PARSE-TREE: | | | OmpClauseList ->
90
90
91
91
! UNPARSE: SUBROUTINE f30
92
- ! UNPARSE: !$OMP METADIRECTIVE WHEN(IMPLEMENTATION={ATOMIC_DEFAULT_MEM_ORDER(acq_rel )}: &
92
+ ! UNPARSE: !$OMP METADIRECTIVE WHEN(IMPLEMENTATION={ATOMIC_DEFAULT_MEM_ORDER(ACQ_REL )}: &
93
93
! UNPARSE: !$OMP&NOTHING)
94
94
! UNPARSE: END SUBROUTINE
95
95
@@ -194,3 +194,4 @@ subroutine f41
194
194
! PARSE-TREE: | | OmpDirectiveSpecification
195
195
! PARSE-TREE: | | | llvm::omp::Directive = nothing
196
196
! PARSE-TREE: | | | OmpClauseList ->
197
+ :qa
You can’t perform that action at this time.
0 commit comments