[Flang][OpenMP][Sema] Support propagation of REQUIRES information across program units

Re-land commit 3787fd942f

This patch adds support for storing OpenMP REQUIRES information in the
semantics symbols for programs/subprograms and modules/submodules, and
populates them during directive resolution. A pass is added to name resolution
that makes sure this information is also propagated across top-level programs,
functions and subprograms.

Storing REQUIRES information inside of semantics symbols will also allow
supporting the propagation of this information across Fortran modules. This
will come as a separate patch.

The `bool DirectiveAttributeVisitor::Pre(const parser::SpecificationPart &x)`
method is removed since it resulted in specification parts being visited twice.

This is patch 3/5 of a series splitting D149337 to simplify review.

Differential Revision: https://reviews.llvm.org/D157983
This commit is contained in:
Sergio Afonso
2023-09-11 13:39:22 +01:00
parent 26ca2f47c1
commit edc2fb0733
11 changed files with 224 additions and 27 deletions

View File

@@ -2307,17 +2307,7 @@ public:
}
void Unparse(const OmpAtomicDefaultMemOrderClause &x) {
switch (x.v) {
case OmpAtomicDefaultMemOrderClause::Type::SeqCst:
Word("SEQ_CST");
break;
case OmpAtomicDefaultMemOrderClause::Type::AcqRel:
Word("ACQ_REL");
break;
case OmpAtomicDefaultMemOrderClause::Type::Relaxed:
Word("RELAXED");
break;
}
Word(ToUpperCaseLetters(common::EnumToString(x.v)));
}
void Unparse(const OmpAtomicClauseList &x) { Walk(" ", x.v, " "); }