3838#include " flang/Semantics/type.h"
3939#include " flang/Support/Fortran.h"
4040#include " flang/Support/default-kinds.h"
41+ #include " llvm/ADT/SmallVector.h"
4142#include " llvm/Support/raw_ostream.h"
4243#include < list>
4344#include < map>
@@ -1766,14 +1767,6 @@ void OmpVisitor::ProcessMapperSpecifier(const parser::OmpMapperSpecifier &spec,
17661767 // just following the natural flow, the map clauses gets processed before
17671768 // the type has been fully processed.
17681769 BeginDeclTypeSpec ();
1769- if (auto &mapperName{std::get<std::optional<parser::Name>>(spec.t )}) {
1770- mapperName->symbol =
1771- &MakeSymbol (*mapperName, MiscDetails{MiscDetails::Kind::ConstructName});
1772- } else {
1773- const parser::CharBlock defaultName{" default" , 7 };
1774- MakeSymbol (
1775- defaultName, Attrs{}, MiscDetails{MiscDetails::Kind::ConstructName});
1776- }
17771770
17781771 PushScope (Scope::Kind::OtherConstruct, nullptr );
17791772 Walk (std::get<parser::TypeSpec>(spec.t ));
@@ -1783,6 +1776,18 @@ void OmpVisitor::ProcessMapperSpecifier(const parser::OmpMapperSpecifier &spec,
17831776 Walk (clauses);
17841777 EndDeclTypeSpec ();
17851778 PopScope ();
1779+
1780+ if (auto &mapperName{std::get<std::optional<parser::Name>>(spec.t )}) {
1781+ mapperName->symbol =
1782+ &MakeSymbol (*mapperName, MiscDetails{MiscDetails::Kind::ConstructName});
1783+ } else {
1784+ const auto &type = std::get<parser::TypeSpec>(spec.t );
1785+ static llvm::SmallVector<std::string> defaultNames;
1786+ defaultNames.emplace_back (
1787+ type.declTypeSpec ->derivedTypeSpec ().name ().ToString () + " .default" );
1788+ MakeSymbol (defaultNames.back (), Attrs{},
1789+ MiscDetails{MiscDetails::Kind::ConstructName});
1790+ }
17861791}
17871792
17881793void OmpVisitor::ProcessReductionSpecifier (
0 commit comments