diff --git a/flang/lib/semantics/resolve-names.cc b/flang/lib/semantics/resolve-names.cc index 8e891d74e8a0..530dcd8c0293 100644 --- a/flang/lib/semantics/resolve-names.cc +++ b/flang/lib/semantics/resolve-names.cc @@ -2393,7 +2393,7 @@ void ResolveNamesVisitor::Post(const parser::SpecificationPart &s) { bool ResolveNamesVisitor::Pre(const parser::MainProgram &x) { using stmtType = std::optional>; - if (const stmtType &stmt = std::get(x.t)) { + if (auto &stmt{std::get(x.t)}) { const parser::Name &name{stmt->statement.v}; Symbol &symbol{MakeSymbol(name, MainProgramDetails{})}; PushScope(Scope::Kind::MainProgram, &symbol); @@ -2401,6 +2401,12 @@ bool ResolveNamesVisitor::Pre(const parser::MainProgram &x) { } else { PushScope(Scope::Kind::MainProgram, nullptr); } + if (auto &subpPart{ + std::get>(x.t)}) { + subpNamesOnly_ = SubprogramKind::Internal; + parser::Walk(*subpPart, *static_cast(this)); + subpNamesOnly_ = std::nullopt; + } return true; }