diff --git a/flang/include/flang/Semantics/symbol.h b/flang/include/flang/Semantics/symbol.h index 4535a92ce3dd8..595f09b3c5ec8 100644 --- a/flang/include/flang/Semantics/symbol.h +++ b/flang/include/flang/Semantics/symbol.h @@ -1014,6 +1014,10 @@ inline const DeclTypeSpec *Symbol::GetTypeImpl(int depth) const { [&](const HostAssocDetails &x) { return x.symbol().GetTypeImpl(depth); }, + [&](const GenericDetails &x) { + const Symbol *symbol{x.specific()}; + return symbol ? symbol->GetTypeImpl(depth) : nullptr; + }, [](const auto &) -> const DeclTypeSpec * { return nullptr; }, }, details_); diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index 36deab969456d..6914f95837f67 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -5648,9 +5648,7 @@ void DeclarationVisitor::Post(const parser::ProcDecl &x) { const auto &name{std::get(x.t)}; const Symbol *procInterface{nullptr}; if (interfaceName_) { - procInterface = interfaceName_->symbol->has() - ? interfaceName_->symbol->get().specific() - : interfaceName_->symbol; + procInterface = interfaceName_->symbol; } auto attrs{HandleSaveName(name.source, GetAttrs())}; DerivedTypeDetails *dtDetails{nullptr};