Peter Klausler 6df27dd42d
[flang] Fix missed case of symbol renaming in module file generation (#132475)
The map of symbols requiring new local aliases for USE association needs
to use the symbols' ultimate resolutions to avoid missing cases that can
arise in convoluted codes with lots of confusing renamings.

Fixes https://github.com/llvm/llvm-project/issues/132435.
2025-03-26 12:09:38 -07:00

86 lines
1.2 KiB
Fortran

! RUN: %python %S/test_modfile.py %s %flang_fc1
module m1
type foo
integer :: c1 = 123
end type
end
module m2
use m1, only: foo
type baz
type(foo) :: d = foo()
end type
type bar
type(baz) :: e = baz()
end type
end
module m3
use m1, only: m1foo => foo
type foo
type(m1foo), private :: c2 = m1foo()
end type
end
module m4
use m2, only: m3foo => foo
type foo
type(m3foo), private :: c3 = m3foo()
end type
end
module m5
use m2, only: m2bar => bar
use m4, only: foo
type blah
type(m2bar) :: f = m2bar()
end type
end
!Expect: m1.mod
!module m1
!type::foo
!integer(4)::c1=123_4
!end type
!end
!Expect: m2.mod
!module m2
!use m1,only:foo
!type::baz
!type(foo)::d=foo(c1=123_4)
!end type
!type::bar
!type(baz)::e=baz(d=foo(c1=123_4))
!end type
!end
!Expect: m3.mod
!module m3
!use m1,only:m1foo=>foo
!type::foo
!type(m1foo),private::c2=m1foo(c1=123_4)
!end type
!end
!Expect: m4.mod
!module m4
!use m2,only:m3foo=>foo
!type::foo
!type(m3foo),private::c3=m3foo(c1=123_4)
!end type
!end
!Expect: m5.mod
!module m5
!use m2,only:m2$foo=>foo
!use m2,only:baz
!use m2,only:m2bar=>bar
!use m4,only:foo
!private::m2$foo
!private::baz
!type::blah
!type(m2bar)::f=m2bar(e=baz(d=m2$foo(c1=123_4)))
!end type
!end