diff --git a/flang/lib/Semantics/mod-file.cpp b/flang/lib/Semantics/mod-file.cpp index b45f1c060da2f..bef934beaacfa 100644 --- a/flang/lib/Semantics/mod-file.cpp +++ b/flang/lib/Semantics/mod-file.cpp @@ -306,8 +306,10 @@ void ModFileWriter::PrepareRenamings(const Scope &scope) { // to their names in this scope, creating those new names when needed. auto &renamings{context_.moduleFileOutputRenamings()}; for (SymbolRef s : symbolsNeeded) { - if (s->owner().kind() == Scope::Kind::DerivedType) { - continue; // component or binding: ok + if (s->owner().kind() != Scope::Kind::Module) { + // Not a USE'able name from a module's top scope; + // component, binding, dummy argument, &c. + continue; } const Scope *sMod{FindModuleContaining(s->owner())}; if (!sMod || sMod == &scope) { diff --git a/flang/test/Semantics/bug124716.f90 b/flang/test/Semantics/bug124716.f90 new file mode 100644 index 0000000000000..c1487a235721c --- /dev/null +++ b/flang/test/Semantics/bug124716.f90 @@ -0,0 +1,36 @@ +! RUN: %python %S/test_modfile.py %s %flang_fc1 +MODULE m1 + INTERFACE + MODULE SUBROUTINE sub1(N, ARR) + INTEGER, INTENT(IN) :: N + INTEGER, DIMENSION(N) :: ARR + END SUBROUTINE + END INTERFACE +END MODULE +SUBMODULE (m1) m1sub + CONTAINS + MODULE SUBROUTINE sub1(N, ARR) + INTEGER, INTENT(IN) :: N + INTEGER, DIMENSION(N) :: ARR + PRINT *, "sub1", N, ARR + END SUBROUTINE +END SUBMODULE + +!Expect: m1.mod +!module m1 +!interface +!module subroutine sub1(n,arr) +!integer(4),intent(in)::n +!integer(4)::arr(1_8:int(n,kind=8)) +!end +!end interface +!end + +!Expect: m1-m1sub.mod +!submodule(m1) m1sub +!contains +!module subroutine sub1(n,arr) +!integer(4),intent(in)::n +!integer(4)::arr(1_8:int(n,kind=8)) +!end +!end