Skip to content

Commit

Permalink
[flang] Don't complain about implicitly-typed dummy arguments inherit…
Browse files Browse the repository at this point in the history
…ed into an IMPLICIT NONE submodule

When a module procedure's interface is defined in an ancestor (sub)module
with an implicitly typed dummy argument, don't emit a bogus error in
the separate module procedure later if its submodule has IMPLICIT NONE.

Fixes llvm-test-suite/Fortran/gfortran/regression/submodule_26.f90.

Differential Revision: https://reviews.llvm.org/D157335
  • Loading branch information
klausler committed Aug 8, 2023
1 parent d325c5d commit 078b1c4
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
1 change: 1 addition & 0 deletions flang/lib/Semantics/resolve-names-utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
27 changes: 27 additions & 0 deletions flang/test/Semantics/modproc02.f90
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 078b1c4

Please sign in to comment.