@@ -70,6 +70,32 @@ static void DumpList(llvm::raw_ostream &os, const char *label, const T &list) {
7070 }
7171}
7272
73+ llvm::raw_ostream &operator <<(
74+ llvm::raw_ostream &os, const WithOmpDeclarative &x) {
75+ if (x.has_ompRequires () || x.has_ompAtomicDefaultMemOrder ()) {
76+ os << " OmpRequirements:(" ;
77+ if (const common::OmpMemoryOrderType *admo{x.ompAtomicDefaultMemOrder ()}) {
78+ os << parser::ToLowerCaseLetters (llvm::omp::getOpenMPClauseName (
79+ llvm::omp::Clause::OMPC_atomic_default_mem_order))
80+ << ' (' << parser::ToLowerCaseLetters (EnumToString (*admo)) << ' )' ;
81+ if (x.has_ompRequires ()) {
82+ os << ' ,' ;
83+ }
84+ }
85+ if (const WithOmpDeclarative::RequiresClauses *reqs{x.ompRequires ()}) {
86+ size_t num{0 }, size{reqs->count ()};
87+ reqs->IterateOverMembers ([&](llvm::omp::Clause f) {
88+ os << parser::ToLowerCaseLetters (llvm::omp::getOpenMPClauseName (f));
89+ if (++num < size) {
90+ os << ' ,' ;
91+ }
92+ });
93+ }
94+ os << ' )' ;
95+ }
96+ return os;
97+ }
98+
7399void SubprogramDetails::set_moduleInterface (Symbol &symbol) {
74100 CHECK (!moduleInterface_);
75101 moduleInterface_ = &symbol;
@@ -150,6 +176,7 @@ llvm::raw_ostream &operator<<(
150176 os << x;
151177 }
152178 }
179+ os << static_cast <const WithOmpDeclarative &>(x);
153180 return os;
154181}
155182
@@ -580,7 +607,9 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) {
580607 common::visit ( //
581608 common::visitors{
582609 [&](const UnknownDetails &) {},
583- [&](const MainProgramDetails &) {},
610+ [&](const MainProgramDetails &x) {
611+ os << static_cast <const WithOmpDeclarative &>(x);
612+ },
584613 [&](const ModuleDetails &x) {
585614 if (x.isSubmodule ()) {
586615 os << " (" ;
@@ -599,6 +628,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) {
599628 if (x.isDefaultPrivate ()) {
600629 os << " isDefaultPrivate" ;
601630 }
631+ os << static_cast <const WithOmpDeclarative &>(x);
602632 },
603633 [&](const SubprogramNameDetails &x) {
604634 os << ' ' << EnumToString (x.kind ());
0 commit comments