diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -3048,7 +3048,8 @@ details->set_specific(Resolve(name, *specific)); } else if (isGeneric()) { SayAlreadyDeclared(name, *specific); - } else if (!specific->has()) { + } + if (!specific->has()) { specific->set_details(SubprogramDetails{}); } return specific; diff --git a/flang/test/Semantics/resolve19.f90 b/flang/test/Semantics/resolve19.f90 --- a/flang/test/Semantics/resolve19.f90 +++ b/flang/test/Semantics/resolve19.f90 @@ -22,3 +22,14 @@ end subroutine end interface end module + +module m3 + interface s + subroutine s + end + end interface +contains + !ERROR: 's' is already declared in this scoping unit + subroutine s + end subroutine +end