Skip to content

[Flang] Compilation abnormally terminates when intrinsic function is written as the argmument of call statement, and it becomes dummy argument of module subroutine construct, and external attribute is defined #124487

@ohno-fj

Description

@ohno-fj
Version of flang : 20.0.0(f5a35a31bfe6cbc16bec0c130f2bb3632dbf1fbf)/AArch64

In the attached program, when intrinsic function (char) is written as the first actual argument of call statement, and it becomes the first dummy argument of module subroutine construct (ss), and external attribute is defined, an abnormal termination occurs during compilation.
If submodule is not used, a compilation error occurs. This is correct behavior.
The above program is sngg427o_3.f90.

The following are the test program, Flang, Gfortran and ifx compilation/execution result.

sngg427o_2.f90:

module m1
  implicit none
  intrinsic:: char
  private ::char
  interface
    module subroutine sub()
    end subroutine
    module subroutine ss(x1,x2)
      character,external:: x1
      character(*)::x2
    end
  end interface
end

submodule (m1) submod
contains
  module procedure sub
    implicit none
    character::cc
    call ss(char,cc)
    write(1,'(a)') cc
  end
  module procedure  ss
    x2=x1(ichar('a'))
  end
end submodule submod

program main
  use m1
  call sub
  print *,'pass'
end program main
$ flang sngg427o_2.f90

fatal internal error: CHECK(!type_) failed at /work/groups/ssoft/compiler/llvm/src/llvm-main/flang/lib/Semantics/symbol.cpp(151)
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-20250120-69d3ba3db922/bin/flang -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 -resource-dir /work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/lib/clang/20 -mframe-pointer=non-leaf -o /tmp/sngg427o_2-88676c.o -x f95-cpp-input sngg427o_2.f90
 #0 0x0000400019ef25a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x5a025a8)
 #1 0x0000400019ef0630 llvm::sys::RunSignalHandlers() (/work/groups/ssoft/compiler/llvm/aarch64/main-latest/lib/libLLVM.so.20.0git+0x5a00630)
 #2 0x0000400019ef0788 SignalHandler(int) Signals.cpp:0:0
 #3 0x000040000a0107a0 (linux-vdso.so.1+0x7a0)
 #4 0x000040001ed86274 raise (/lib64/libc.so.6+0x36274)
 #5 0x000040001ed70a2c abort (/lib64/libc.so.6+0x20a2c)
 #6 0x000000000615a834 (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x615a834)
 #7 0x00000000056376a0 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda'(Fortran::semantics::EntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semanti
cs::DeclTypeSpec const&)::'lambda0'(Fortran::semantics::ObjectEntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda1'(Fortran::semantics::AssocEntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda2'(Fortran::semantics::
ProcEntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda3'(Fortran::semantics::TypeParamDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda4'(auto&)>&&, std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::
MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantics::SubprogramDetails, Fortran::semantics::SubprogramNameDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntityDetails, Fortran::semantics::ProcEntityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::Deriv
edTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseErrorDetails, Fortran::semantics::HostAssocDetails, Fortran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortran::semantics::NamelistDetails, Fortran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fort
ran::semantics::MiscDetails>&)>, std::tuple<std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantics::SubprogramDetails, Fortran::semantics::SubprogramNameDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntity
Details, Fortran::semantics::ProcEntityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::DerivedTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseErrorDetails, Fortran::semantics::HostAssocDetails, Fortran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortra
n::semantics::NamelistDetails, Fortran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fortran::semantics::MiscDetails>&>, std::integer_sequence<unsigned long, 5ul>>::__visit_invoke(Fortran::common::visitors<Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda'(
Fortran::semantics::EntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda0'(Fortran::semantics::ObjectEntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda1'(Fortran::semantics::AssocEntityDetails&), Fortran::semantics:
:Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda2'(Fortran::semantics::ProcEntityDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'lambda3'(Fortran::semantics::TypeParamDetails&), Fortran::semantics::Symbol::SetType(Fortran::semantics::DeclTypeSpec const&)::'
lambda4'(auto&)>&&, std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantics::SubprogramDetails, Fortran::semantics::SubprogramNameDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntityDetails, Fortran::semant
ics::ProcEntityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::DerivedTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseErrorDetails, Fortran::semantics::HostAssocDetails, Fortran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortran::semantics::NamelistDe
tails, Fortran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fortran::semantics::MiscDetails>&) symbol.cpp:0:0
 #8 0x000000000563923c (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x563923c)
 #9 0x0000000005359c2c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(Fortran::common::visitors<Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda'(Fortran::semantics::ObjectEntityDetails&), Fortran::semantics::SymbolMapper::MapSymbolEx
prs(Fortran::semantics::Symbol&)::'lambda0'(Fortran::semantics::ProcEntityDetails&), Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda1'(Fortran::semantics::HostAssocDetails const&), Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda2'(auto con
st&)>&&, std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantics::SubprogramDetails, Fortran::semantics::SubprogramNameDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntityDetails, Fortran::semantics::ProcEn
tityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::DerivedTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseErrorDetails, Fortran::semantics::HostAssocDetails, Fortran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortran::semantics::NamelistDetails, Fort
ran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fortran::semantics::MiscDetails>&)>, std::tuple<std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantics::SubprogramDetails, Fortran::semantics::SubprogramNa
meDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntityDetails, Fortran::semantics::ProcEntityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::DerivedTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseErrorDetails, Fortran::semantics::HostAssocDetails, Fort
ran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortran::semantics::NamelistDetails, Fortran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fortran::semantics::MiscDetails>&>, std::integer_sequence<unsigned long, 7ul>>::__visit_invoke(Fortran::common::visitors<Fortran::
semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda'(Fortran::semantics::ObjectEntityDetails&), Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda0'(Fortran::semantics::ProcEntityDetails&), Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semanti
cs::Symbol&)::'lambda1'(Fortran::semantics::HostAssocDetails const&), Fortran::semantics::SymbolMapper::MapSymbolExprs(Fortran::semantics::Symbol&)::'lambda2'(auto const&)>&&, std::variant<Fortran::semantics::UnknownDetails, Fortran::semantics::MainProgramDetails, Fortran::semantics::ModuleDetails, Fortran::semantic
s::SubprogramDetails, Fortran::semantics::SubprogramNameDetails, Fortran::semantics::EntityDetails, Fortran::semantics::ObjectEntityDetails, Fortran::semantics::ProcEntityDetails, Fortran::semantics::AssocEntityDetails, Fortran::semantics::DerivedTypeDetails, Fortran::semantics::UseDetails, Fortran::semantics::UseEr
rorDetails, Fortran::semantics::HostAssocDetails, Fortran::semantics::GenericDetails, Fortran::semantics::ProcBindingDetails, Fortran::semantics::NamelistDetails, Fortran::semantics::CommonBlockDetails, Fortran::semantics::TypeParamDetails, Fortran::semantics::MiscDetails>&) resolve-names-utils.cpp:0:0
#10 0x0000000005358b98 Fortran::semantics::MapSubprogramToNewSymbols(Fortran::semantics::Symbol const&, Fortran::semantics::Symbol&, Fortran::semantics::Scope&, Fortran::semantics::SymbolAndTypeMappings*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x5358b98)
#11 0x0000000005314ce8 Fortran::semantics::SubprogramVisitor::BeginMpSubprogram(Fortran::parser::Name const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x5314ce8)
#12 0x000000000531bf0c Fortran::semantics::ResolveNamesVisitor::BeginScopeForNode(Fortran::semantics::ProgramTree const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x531bf0c)
#13 0x000000000532c3cc Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x532c3cc)
#14 0x000000000532c488 Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x532c488)
#15 0x000000000532c8b4 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x532c8b4)
#16 0x000000000532d18c Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x532d18c)
#17 0x00000000053f1ba0 Fortran::semantics::Semantics::Perform() (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x53f1ba0)
#18 0x0000000004c39cf8 Fortran::frontend::FrontendAction::runSemanticChecks() (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c39cf8)
#19 0x0000000004d264cc Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4d264cc)
#20 0x0000000004c3bfcc Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c3bfcc)
#21 0x0000000004c2bb70 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c2bb70)
#22 0x0000000004c4085c Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c4085c)
#23 0x0000000004c24518 fc1_main(llvm::ArrayRef<char const*>, char const*) (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c24518)
#24 0x0000000004c23f70 main (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c23f70)
#25 0x000040001ed74384 __libc_start_main (/lib64/libc.so.6+0x24384)
#26 0x0000000004c2243c _start (/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang+0x4c2243c)
flang-20: error: unable to execute command: Aborted (core dumped)
flang-20: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 20.0.0git (https://github.com/llvm/llvm-project.git 69d3ba3db922fca8cfc47b5f115b6bea6a737aab)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin
Build config: +assertions
flang-20: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-20: note: diagnostic msg: /tmp/sngg427o_2-865f26
flang-20: note: diagnostic msg: /tmp/sngg427o_2-865f26.sh
flang-20: note: diagnostic msg:

********************
$
$ cat /tmp/sngg427o_2-865f26
#line "./sngg427o_2.f90" 1
      module m1
      implicit none
      intrinsic:: char
      private ::char
      interface
      module subroutine sub()
      end subroutine
      module subroutine ss(x1,x2)
      character,external:: x1
      character(*)::x2
      end
      end interface
      end

      submodule(m1) submod
      contains
      module procedure sub
      implicit none
      character::cc
      call ss(char,cc)
      write(1,'(a)') cc
      end
      module procedure ss
      x2=x1(ichar('a'))
      end
      end submodule submod

      program main
      use m1
      call sub
      print *,'pass'
      end program main
$
$ cat /tmp/sngg427o_2-865f26.sh
# Crash reproducer for clang version 20.0.0git (https://github.com/llvm/llvm-project.git 69d3ba3db922fca8cfc47b5f115b6bea6a737aab)
# Driver args: "sngg427o_2.f90"
# Original command:  "/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang" "-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-featur
e" "+fp-armv8" "-target-feature" "+neon" "-resource-dir" "/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/lib/clang/20" "-mframe-pointer=non-leaf" "-o" "/tmp/sngg427o_2-88676c.o" "-x" "f95-cpp-input" "sngg427o_2.f90"
 "/work/groups/ssoft/compiler/llvm/aarch64/main-20250120-69d3ba3db922/bin/flang" "-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" "-tar
get-feature" "+neon" "-mframe-pointer=non-leaf" "-x" "f95-cpp-input" "sngg427o_2-865f26"
$
$ gfortran sngg427o_2.f90
sngg427o_2.f90:20:12:

   20 |     call ss(char,cc)
      |            1
Error: Intrinsic ‘char’ at (1) is not allowed as an actual argument
$
$ ifx sngg427o_2.f90
sngg427o_2.f90(20): error #6551: This intrinsic procedure cannot be passed as an actual argument.   [CHAR]
    call ss(char,cc)
------------^
compilation aborted for sngg427o_2.f90 (code 1)
$

sngg427o_3.f90:

module m1
  implicit none
  intrinsic :: char
  private :: char
  contains
  subroutine sub()
    implicit none
    character :: cc
    call ss(char, cc)
    write(1,'(a)') cc
  end subroutine sub

  subroutine ss(x1, x2)
    implicit none
     character,external:: x1
     character(*)::x2
    x2 = x1(ichar('a'))
  end subroutine ss
end module m1

program main
  use m1
  call sub
  print *,'sngg427o : pass'
end program main
flang sngg427o_3.f90
error: Semantic errors in sngg427o_3.f90
./sngg427o_3.f90:9:13: error: 'char' is not an unrestricted specific intrinsic procedure
      call ss(char, cc)
              ^^^^
$

Metadata

Metadata

Assignees

Labels

crashPrefer [crash-on-valid] or [crash-on-invalid]flang:frontend

Type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions