@@ -1058,6 +1058,7 @@ class DeclarationVisitor : public ArraySpecVisitor,
10581058 const parser::Name *ResolveDesignator (const parser::Designator &);
10591059 int GetVectorElementKind (
10601060 TypeCategory category, const std::optional<parser::KindSelector> &kind);
1061+ std::optional<DerivedTypeSpec> ResolveDerivedType (const parser::Name &);
10611062
10621063protected:
10631064 bool BeginDecl ();
@@ -1205,7 +1206,6 @@ class DeclarationVisitor : public ArraySpecVisitor,
12051206 Symbol &DeclareProcEntity (
12061207 const parser::Name &, Attrs, const Symbol *interface);
12071208 void SetType (const parser::Name &, const DeclTypeSpec &);
1208- std::optional<DerivedTypeSpec> ResolveDerivedType (const parser::Name &);
12091209 std::optional<DerivedTypeSpec> ResolveExtendsType (
12101210 const parser::Name &, const parser::Name *);
12111211 Symbol *MakeTypeSymbol (const SourceName &, Details &&);
@@ -1468,6 +1468,10 @@ class OmpVisitor : public virtual DeclarationVisitor {
14681468 AddOmpSourceRange (x.source );
14691469 return true ;
14701470 }
1471+
1472+ bool Pre (const parser::OpenMPDeclareMapperConstruct &);
1473+ void Post (const parser::OpenMPDeclareMapperConstruct &) { PopScope (); };
1474+
14711475 void Post (const parser::OmpBeginLoopDirective &) {
14721476 messageHandler ().set_currStmtSource (std::nullopt );
14731477 }
@@ -1605,6 +1609,26 @@ void OmpVisitor::Post(const parser::OpenMPBlockConstruct &x) {
16051609 }
16061610}
16071611
1612+ bool OmpVisitor::Pre (const parser::OpenMPDeclareMapperConstruct &x) {
1613+ AddOmpSourceRange (x.source );
1614+ BeginDeclTypeSpec ();
1615+ PushScope (Scope::Kind::OtherConstruct, nullptr );
1616+ const auto &spec{std::get<parser::OmpDeclareMapperSpecifier>(x.t )};
1617+ if (const auto &mapperName{
1618+ std::get<std::optional<Fortran::parser::Name>>(spec.t )}) {
1619+ Symbol *mapperSym{&MakeSymbol (*mapperName, Attrs{})};
1620+ mapperName->symbol = mapperSym;
1621+ }
1622+ Walk (std::get<Fortran::parser::TypeSpec>(spec.t ));
1623+ const auto &varName{std::get<Fortran::parser::ObjectName>(spec.t )};
1624+ DeclareObjectEntity (varName);
1625+
1626+ Walk (std::get<std::list<std::list<Fortran::parser::OmpMapClause>>>(x.t ));
1627+
1628+ EndDeclTypeSpec ();
1629+ return false ;
1630+ }
1631+
16081632// Walk the parse tree and resolve names to symbols.
16091633class ResolveNamesVisitor : public virtual ScopeHandler,
16101634 public ModuleVisitor,
0 commit comments