diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp index c3be572bf51f1..2f8e5777c5290 100644 --- a/flang/lib/Semantics/resolve-names-utils.cpp +++ b/flang/lib/Semantics/resolve-names-utils.cpp @@ -917,6 +917,7 @@ void MapSubprogramToNewSymbols(const Symbol &oldSymbol, Symbol &newSymbol, if (!dummyArg) { newDetails.add_alternateReturn(); } else if (Symbol *copy{newScope.CopySymbol(*dummyArg)}) { + copy->set(Symbol::Flag::Implicit, false); newDetails.add_dummyArg(*copy); mappings->symbolMap[dummyArg] = copy; } diff --git a/flang/test/Semantics/modproc02.f90 b/flang/test/Semantics/modproc02.f90 new file mode 100644 index 0000000000000..229ef72e6bcf0 --- /dev/null +++ b/flang/test/Semantics/modproc02.f90 @@ -0,0 +1,27 @@ +!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s +module m + interface + module subroutine s(x) ! implicitly typed + end + end interface +end + +submodule (m) sm + implicit none + contains + !Ensure no error here due to IMPLICIT NONE + module procedure s + end +end + +!CHECK: Module scope: m size=0 alignment=1 sourceRange=63 bytes +!CHECK: s, MODULE, PUBLIC (Subroutine): Subprogram isInterface (REAL(4) x) +!CHECK: sm: Module (m) +!CHECK: Subprogram scope: s size=4 alignment=4 sourceRange=26 bytes +!CHECK: s (Subroutine): HostAssoc +!CHECK: x (Implicit) size=4 offset=0: ObjectEntity dummy type: REAL(4) +!CHECK: Module scope: sm size=0 alignment=1 sourceRange=65 bytes +!CHECK: s, MODULE, PUBLIC (Subroutine): Subprogram (REAL(4) x) moduleInterface: s, MODULE, PUBLIC (Subroutine): Subprogram isInterface (REAL(4) x) +!CHECK: Subprogram scope: s size=4 alignment=4 sourceRange=22 bytes +!CHECK: s: HostAssoc +!CHECK: x size=4 offset=0: ObjectEntity dummy type: REAL(4)