llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.03k stars 11.57k forks source link

[Flang] Compilation error when type is defined in module by using derived type with the same name from another module #107783

Open ohno-fj opened 1 week ago

ohno-fj commented 1 week ago
Version of flang-new : 20.0.0(357bd61744bb8cc2b9b07447294fa977e5758550/AArch64

When type is defined in module by using derived type with the same name from another module, a compilation-time error occurs.

The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.

sngtbind_11_3.f90:

module mod1
  use, intrinsic :: ISO_C_BINDING
  type, bind(C) :: proc
     integer(C_INT), public :: cmemflags = 0
  end type proc
  type (proc) ::mod1_str
end module mod1
module mod2
  use, intrinsic :: ISO_C_BINDING
  use mod1 ,only:sss=>proc
  type, bind(C) :: proc
     integer(C_INT), public :: cmemflags = 0
  end type proc
  type (proc) :: str = sss(1)
end module mod2

program main
  use mod1
  use mod2
  print *,'OK'
end program main
$ flang-new sngtbind_11_3.f90
flang-new: /work/groups/ssoft/compiler/llvm/src/llvm-main/flang/lib/Optimizer/Builder/FIRBuilder.cpp:473: mlir::Value fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value): Assertion `!fir::isa_derived(toTy)' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +outline-atomics -target-feature +v8a -target-feature +fp-armv8 -target-fea
ture +neon -resource-dir /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20 -mframe-pointer=non-leaf -o /tmp/sngtbind_11_3-ffcae6.o -x f95-cpp-input sngtbind_11_3.f90
 #0 0x000040001dd30e28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54e0e28)
 #1 0x000040001dd2eea8 llvm::sys::RunSignalHandlers() (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54deea8)
 #2 0x000040001dd2f000 SignalHandler(int) Signals.cpp:0:0
 #3 0x00004000135b07a0 (linux-vdso.so.1+0x7a0)
 #4 0x0000400022906274 raise (/lib64/libc.so.6+0x36274)
 #5 0x00004000228f0a2c abort (/lib64/libc.so.6+0x20a2c)
 #6 0x00004000228ffba0 __assert_fail_base (/lib64/libc.so.6+0x2fba0)
 #7 0x00004000228ffc18 __assert_perror_fail (/lib64/libc.so.6+0x2fc18)
 #8 0x0000000005ab4558 fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x5ab4558)
 #9 0x0000000004cfaef4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr)::'lambda1'(fir::FirOpBuilder&)::operator()(fir::FirOpBuilder&) const ConvertVariable.cpp:0:0
#10 0x0000000004cf18a8 Fortran::lower::createGlobalInitialization(fir::FirOpBuilder&, fir::GlobalOp, std::function<void (fir::FirOpBuilder&)>) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf18a8)
#11 0x0000000004cf1fc4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr) ConvertVariable.cpp:0:0
#12 0x0000000004cf2790 Fortran::lower::defineModuleVariable(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf2790)
#13 0x0000000004a78cbc std::_Function_handler<void (), (anonymous namespace)::FirConverter::lowerModuleDeclScope(Fortran::lower::pft::ModuleLikeUnit&)::'lambda'()>::_M_invoke(std::_Any_data const&) Bridge.cpp:0:0
#14 0x0000000004a8aacc (anonymous namespace)::FirConverter::createGlobalOutsideOfFunctionLowering(std::function<void ()> const&) Bridge.cpp:0:0
#15 0x0000000004a8ae34 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::low
er::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&)
, (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDirectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower:
:pft::OpenACCDirectiveUnit>&)>, std::tuple<std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&>, std::integer_sequence<unsigned long, 1ul>>::__visit_invoke(
Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortr
an::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDi
rectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&) Bridge.cpp:0:0
#16 0x0000000004a92c64 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a92c64)
#17 0x0000000004a34774 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a34774)
#18 0x0000000004970548 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4970548)
#19 0x0000000004962ab8 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4962ab8)
#20 0x0000000004974608 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4974608)
#21 0x000000000495bdf8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495bdf8)
#22 0x000000000495b200 main (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495b200)
#23 0x00004000228f4384 __libc_start_main (/lib64/libc.so.6+0x24384)
#24 0x0000000004959e84 _start (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4959e84)
flang-new: error: unable to execute command: Aborted (core dumped)
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin
Build config: +assertions
flang-new: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234
flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234.sh
flang-new: note: diagnostic msg:

********************
$
$ cat /tmp/sngtbind_11_3-0a9234
#line "./sngtbind_11_3.f90" 1
      module mod1
      use, intrinsic :: ISO_C_BINDING
      type, bind(C) :: proc
      integer(C_INT), public :: cmemflags = 0
      end type proc
      type(proc) ::mod1_str
      end module mod1
      module mod2
      use, intrinsic :: ISO_C_BINDING
      use mod1 ,only:sss=>proc
      type, bind(C) :: proc
      integer(C_INT), public :: cmemflags = 0
      end type proc
      type(proc) :: str = sss(1)
      end module mod2

      program main
      use mod1
      use mod2
      print *,'OK'
      end program main
$
$ cat /tmp/sngtbind_11_3-0a9234.sh
# Crash reproducer for clang version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550)
# Driver args: "sngtbind_11_3.f90"
# Original command:  "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-fe
ature" "+fp-armv8" "-target-feature" "+neon" "-resource-dir" "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20" "-mframe-pointer=non-leaf" "-o" "/tmp/sngtbind_11_3-ffcae6.o" "-x" "f95-cpp-input" "sngtbind_11_3.f90"
 "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-feature" "+fp-armv8" "
-target-feature" "+neon" "-mframe-pointer=non-leaf" "-x" "f95-cpp-input" "sngtbind_11_3-0a9234"
$
$ gfortran sngtbind_11_3.f90; ./a.out
 OK
$
$ ifort -diag-disable=10448 sngtbind_11_3.f90; ./a.out
 OK
$
llvmbot commented 1 week ago

@llvm/issue-subscribers-flang-frontend

Author: None (ohno-fj)

``` Version of flang-new : 20.0.0(357bd61744bb8cc2b9b07447294fa977e5758550/AArch64 ``` When `type` is defined in module by using `derived type` with the same name from another module, a compilation-time error occurs. The following are the test program, Flang-new, Gfortran and ifort compilation/execution result. sngtbind_11_3.f90: ```fortran module mod1 use, intrinsic :: ISO_C_BINDING type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type (proc) ::mod1_str end module mod1 module mod2 use, intrinsic :: ISO_C_BINDING use mod1 ,only:sss=>proc type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type (proc) :: str = sss(1) end module mod2 program main use mod1 use mod2 print *,'OK' end program main ``` ``` $ flang-new sngtbind_11_3.f90 flang-new: /work/groups/ssoft/compiler/llvm/src/llvm-main/flang/lib/Optimizer/Builder/FIRBuilder.cpp:473: mlir::Value fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value): Assertion `!fir::isa_derived(toTy)' failed. PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +outline-atomics -target-feature +v8a -target-feature +fp-armv8 -target-fea ture +neon -resource-dir /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20 -mframe-pointer=non-leaf -o /tmp/sngtbind_11_3-ffcae6.o -x f95-cpp-input sngtbind_11_3.f90 #0 0x000040001dd30e28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54e0e28) #1 0x000040001dd2eea8 llvm::sys::RunSignalHandlers() (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54deea8) #2 0x000040001dd2f000 SignalHandler(int) Signals.cpp:0:0 #3 0x00004000135b07a0 (linux-vdso.so.1+0x7a0) #4 0x0000400022906274 raise (/lib64/libc.so.6+0x36274) #5 0x00004000228f0a2c abort (/lib64/libc.so.6+0x20a2c) #6 0x00004000228ffba0 __assert_fail_base (/lib64/libc.so.6+0x2fba0) #7 0x00004000228ffc18 __assert_perror_fail (/lib64/libc.so.6+0x2fc18) #8 0x0000000005ab4558 fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x5ab4558) #9 0x0000000004cfaef4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr)::'lambda1'(fir::FirOpBuilder&)::operator()(fir::FirOpBuilder&) const ConvertVariable.cpp:0:0 #10 0x0000000004cf18a8 Fortran::lower::createGlobalInitialization(fir::FirOpBuilder&, fir::GlobalOp, std::function<void (fir::FirOpBuilder&)>) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf18a8) #11 0x0000000004cf1fc4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr) ConvertVariable.cpp:0:0 #12 0x0000000004cf2790 Fortran::lower::defineModuleVariable(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf2790) #13 0x0000000004a78cbc std::_Function_handler<void (), (anonymous namespace)::FirConverter::lowerModuleDeclScope(Fortran::lower::pft::ModuleLikeUnit&)::'lambda'()>::_M_invoke(std::_Any_data const&) Bridge.cpp:0:0 #14 0x0000000004a8aacc (anonymous namespace)::FirConverter::createGlobalOutsideOfFunctionLowering(std::function<void ()> const&) Bridge.cpp:0:0 #15 0x0000000004a8ae34 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::low er::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&) , (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDirectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower: :pft::OpenACCDirectiveUnit>&)>, std::tuple<std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&>, std::integer_sequence<unsigned long, 1ul>>::__visit_invoke( Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortr an::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDi rectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&) Bridge.cpp:0:0 #16 0x0000000004a92c64 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a92c64) #17 0x0000000004a34774 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a34774) #18 0x0000000004970548 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4970548) #19 0x0000000004962ab8 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4962ab8) #20 0x0000000004974608 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4974608) #21 0x000000000495bdf8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495bdf8) #22 0x000000000495b200 main (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495b200) #23 0x00004000228f4384 __libc_start_main (/lib64/libc.so.6+0x24384) #24 0x0000000004959e84 _start (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4959e84) flang-new: error: unable to execute command: Aborted (core dumped) flang-new: error: flang frontend command failed due to signal (use -v to see invocation) flang-new version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin Build config: +assertions flang-new: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234 flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234.sh flang-new: note: diagnostic msg: ******************** $ ``` ``` $ cat /tmp/sngtbind_11_3-0a9234 #line "./sngtbind_11_3.f90" 1 module mod1 use, intrinsic :: ISO_C_BINDING type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type(proc) ::mod1_str end module mod1 module mod2 use, intrinsic :: ISO_C_BINDING use mod1 ,only:sss=>proc type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type(proc) :: str = sss(1) end module mod2 program main use mod1 use mod2 print *,'OK' end program main $ ``` ``` $ cat /tmp/sngtbind_11_3-0a9234.sh # Crash reproducer for clang version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550) # Driver args: "sngtbind_11_3.f90" # Original command: "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-fe ature" "+fp-armv8" "-target-feature" "+neon" "-resource-dir" "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20" "-mframe-pointer=non-leaf" "-o" "/tmp/sngtbind_11_3-ffcae6.o" "-x" "f95-cpp-input" "sngtbind_11_3.f90" "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-feature" "+fp-armv8" " -target-feature" "+neon" "-mframe-pointer=non-leaf" "-x" "f95-cpp-input" "sngtbind_11_3-0a9234" $ ``` ``` $ gfortran sngtbind_11_3.f90; ./a.out OK $ ``` ``` $ ifort -diag-disable=10448 sngtbind_11_3.f90; ./a.out OK $ ```
llvmbot commented 1 week ago

@llvm/issue-subscribers-flang-ir

Author: None (ohno-fj)

``` Version of flang-new : 20.0.0(357bd61744bb8cc2b9b07447294fa977e5758550/AArch64 ``` When `type` is defined in module by using `derived type` with the same name from another module, a compilation-time error occurs. The following are the test program, Flang-new, Gfortran and ifort compilation/execution result. sngtbind_11_3.f90: ```fortran module mod1 use, intrinsic :: ISO_C_BINDING type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type (proc) ::mod1_str end module mod1 module mod2 use, intrinsic :: ISO_C_BINDING use mod1 ,only:sss=>proc type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type (proc) :: str = sss(1) end module mod2 program main use mod1 use mod2 print *,'OK' end program main ``` ``` $ flang-new sngtbind_11_3.f90 flang-new: /work/groups/ssoft/compiler/llvm/src/llvm-main/flang/lib/Optimizer/Builder/FIRBuilder.cpp:473: mlir::Value fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value): Assertion `!fir::isa_derived(toTy)' failed. PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +outline-atomics -target-feature +v8a -target-feature +fp-armv8 -target-fea ture +neon -resource-dir /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20 -mframe-pointer=non-leaf -o /tmp/sngtbind_11_3-ffcae6.o -x f95-cpp-input sngtbind_11_3.f90 #0 0x000040001dd30e28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54e0e28) #1 0x000040001dd2eea8 llvm::sys::RunSignalHandlers() (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x54deea8) #2 0x000040001dd2f000 SignalHandler(int) Signals.cpp:0:0 #3 0x00004000135b07a0 (linux-vdso.so.1+0x7a0) #4 0x0000400022906274 raise (/lib64/libc.so.6+0x36274) #5 0x00004000228f0a2c abort (/lib64/libc.so.6+0x20a2c) #6 0x00004000228ffba0 __assert_fail_base (/lib64/libc.so.6+0x2fba0) #7 0x00004000228ffc18 __assert_perror_fail (/lib64/libc.so.6+0x2fc18) #8 0x0000000005ab4558 fir::factory::createConvert(mlir::OpBuilder&, mlir::Location, mlir::Type, mlir::Value) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x5ab4558) #9 0x0000000004cfaef4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr)::'lambda1'(fir::FirOpBuilder&)::operator()(fir::FirOpBuilder&) const ConvertVariable.cpp:0:0 #10 0x0000000004cf18a8 Fortran::lower::createGlobalInitialization(fir::FirOpBuilder&, fir::GlobalOp, std::function<void (fir::FirOpBuilder&)>) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf18a8) #11 0x0000000004cf1fc4 defineGlobal(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&, llvm::StringRef, mlir::StringAttr, cuf::DataAttributeAttr) ConvertVariable.cpp:0:0 #12 0x0000000004cf2790 Fortran::lower::defineModuleVariable(Fortran::lower::AbstractConverter&, Fortran::lower::pft::Variable const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4cf2790) #13 0x0000000004a78cbc std::_Function_handler<void (), (anonymous namespace)::FirConverter::lowerModuleDeclScope(Fortran::lower::pft::ModuleLikeUnit&)::'lambda'()>::_M_invoke(std::_Any_data const&) Bridge.cpp:0:0 #14 0x0000000004a8aacc (anonymous namespace)::FirConverter::createGlobalOutsideOfFunctionLowering(std::function<void ()> const&) Bridge.cpp:0:0 #15 0x0000000004a8ae34 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::low er::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&) , (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDirectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower: :pft::OpenACCDirectiveUnit>&)>, std::tuple<std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&>, std::integer_sequence<unsigned long, 1ul>>::__visit_invoke( Fortran::common::visitors<(anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda'(Fortran::lower::pft::FunctionLikeUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda0'(Fortran::lower::pft::ModuleLikeUnit&), (anonymous namespace)::FirConverter::run(Fortr an::lower::pft::Program&)::'lambda1'(Fortran::lower::pft::BlockDataUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda2'(Fortran::lower::pft::CompilerDirectiveUnit&), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::'lambda3'(Fortran::lower::pft::OpenACCDi rectiveUnit&)>&&, std::variant<Fortran::lower::pft::FunctionLikeUnit, Fortran::lower::pft::ModuleLikeUnit, Fortran::lower::pft::BlockDataUnit, Fortran::lower::pft::CompilerDirectiveUnit, Fortran::lower::pft::OpenACCDirectiveUnit>&) Bridge.cpp:0:0 #16 0x0000000004a92c64 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a92c64) #17 0x0000000004a34774 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4a34774) #18 0x0000000004970548 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4970548) #19 0x0000000004962ab8 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4962ab8) #20 0x0000000004974608 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4974608) #21 0x000000000495bdf8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495bdf8) #22 0x000000000495b200 main (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x495b200) #23 0x00004000228f4384 __libc_start_main (/lib64/libc.so.6+0x24384) #24 0x0000000004959e84 _start (/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new+0x4959e84) flang-new: error: unable to execute command: Aborted (core dumped) flang-new: error: flang frontend command failed due to signal (use -v to see invocation) flang-new version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin Build config: +assertions flang-new: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234 flang-new: note: diagnostic msg: /tmp/sngtbind_11_3-0a9234.sh flang-new: note: diagnostic msg: ******************** $ ``` ``` $ cat /tmp/sngtbind_11_3-0a9234 #line "./sngtbind_11_3.f90" 1 module mod1 use, intrinsic :: ISO_C_BINDING type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type(proc) ::mod1_str end module mod1 module mod2 use, intrinsic :: ISO_C_BINDING use mod1 ,only:sss=>proc type, bind(C) :: proc integer(C_INT), public :: cmemflags = 0 end type proc type(proc) :: str = sss(1) end module mod2 program main use mod1 use mod2 print *,'OK' end program main $ ``` ``` $ cat /tmp/sngtbind_11_3-0a9234.sh # Crash reproducer for clang version 20.0.0git (https://github.com/llvm/llvm-project.git 357bd61744bb8cc2b9b07447294fa977e5758550) # Driver args: "sngtbind_11_3.f90" # Original command: "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-fe ature" "+fp-armv8" "-target-feature" "+neon" "-resource-dir" "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/lib/clang/20" "-mframe-pointer=non-leaf" "-o" "/tmp/sngtbind_11_3-ffcae6.o" "-x" "f95-cpp-input" "sngtbind_11_3.f90" "/work/groups/ssoft/compiler/llvm/aarch64/main-20240902-357bd61744bb/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+outline-atomics" "-target-feature" "+v8a" "-target-feature" "+fp-armv8" " -target-feature" "+neon" "-mframe-pointer=non-leaf" "-x" "f95-cpp-input" "sngtbind_11_3-0a9234" $ ``` ``` $ gfortran sngtbind_11_3.f90; ./a.out OK $ ``` ``` $ ifort -diag-disable=10448 sngtbind_11_3.f90; ./a.out OK $ ```