[flang] basic_string::_M_construct null not valid
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
The following code:
```fortran
subroutine TEST_PREFETCH_01_ffl(a, b)
!dir$ prefetch a, x(3:5) ! dataflow fusion
end subroutine
```
Resulted in this output:
```
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: /cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24 -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -fno-color-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -debug-info-kind=standalone -dwarf-version=5 -resource-dir /cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/lib/clang/24 -fintrinsic-modules-path /cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/lib/clang/24/finclude/flang/x86_64-unknown-linux-gnu -mframe-pointer=all -o /tmp/example-5a30ef.o -x f95 /app/example.f90
#0 0x0000000004afded8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x4afded8)
#1 0x0000000004afaf7d SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x000070d493645330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#3 0x000070d49369ec0c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9ec0c)
#4 0x000070d49364527e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#5 0x000070d4936288ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#6 0x000070d493a06152 (/opt/compiler-explorer/gcc-snapshot/lib64/libstdc++.so.6+0xb7152)
#7 0x000070d493a1899a (/opt/compiler-explorer/gcc-snapshot/lib64/libstdc++.so.6+0xc999a)
#8 0x000070d493a05ccd std::unexpected() (/opt/compiler-explorer/gcc-snapshot/lib64/libstdc++.so.6+0xb6ccd)
#9 0x000070d493a18c37 (/opt/compiler-explorer/gcc-snapshot/lib64/libstdc++.so.6+0xc9c37)
#10 0x000070d493a08fa1 std::__throw_logic_error(char const*) (/opt/compiler-explorer/gcc-snapshot/lib64/libstdc++.so.6+0xb9fa1)
#11 0x0000000008654e49 Fortran::parser::operator<<(llvm::raw_ostream&, Fortran::parser::CharBlock const&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x8654e49)
#12 0x000000000568ed36 Fortran::semantics::operator<<(llvm::raw_ostream&, Fortran::semantics::Symbol const&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x568ed36)
#13 0x0000000005086346 (anonymous namespace)::HlfirDesignatorBuilder::gen(Fortran::common::Reference const&) ConvertExprToHLFIR.cpp:0:0
#14 0x00000000050a96cd hlfir::EntityWithAttributes Fortran::common::log2visit::Log2VisitHelper<0ul, 4ul, hlfir::EntityWithAttributes, (anonymous namespace)::HlfirDesignatorBuilder::gen(std::variant, Fortran::evaluate::Component, Fortran::evaluate::ArrayRef, Fortran::evaluate::CoarrayRef, Fortran::evaluate::ComplexPart> const&, bool)::'lambda'(auto const&), std::variant, Fortran::evaluate::Component, Fortran::evaluate::ArrayRef, Fortran::evaluate::CoarrayRef, Fortran::evaluate::ComplexPart> const&>((anonymous namespace)::HlfirDesignatorBuilder::gen(std::variant, Fortran::evaluate::Component, Fortran::evaluate::ArrayRef, Fortran::evaluate::CoarrayRef, Fortran::evaluate::ComplexPart> const&, bool)::'lambda'(auto const&)&&, unsigned long, std::variant, Fortran::evaluate::Component, Fortran::evaluate::ArrayRef, Fortran::evaluate::CoarrayRef, Fortran::evaluate::ComplexPart> const&) ConvertExprToHLFIR.cpp:0:0
#15 0x00000000050e97f7 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen>(Fortran::evaluate::Expr> const&) ConvertExprToHLFIR.cpp:0:0
#16 0x000000000509399c hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen>(Fortran::evaluate::Expr> const&) ConvertExprToHLFIR.cpp:0:0
#17 0x00000000050fac4f hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen(Fortran::evaluate::Expr const&) (.part.0) ConvertExprToHLFIR.cpp:0:0
#18 0x00000000050fb0c4 Fortran::lower::convertExprToHLFIR(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::Expr const&, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x50fb0c4)
#19 0x0000000005009fc9 (anonymous namespace)::FirConverter::genFIR(Fortran::parser::CompilerDirective const&) Bridge.cpp:0:0
#20 0x000000000502ad06 void Fortran::common::log2visit::Log2VisitHelper<47ul, 92ul, void, Fortran::common::visitors::visit<(anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool)::'lambda0'(auto const&)>(auto&&) const::'lambda'(auto)>, std::variant, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference> const&>(Fortran::common::visitors::visit<(anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool)::'lambda0'(auto const&)>(auto&&) const::'lambda'(auto)>&&, unsigned long, std::variant, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference, Fortran::common::Reference> const&) Bridge.cpp:0:0
#21 0x000000000502c9a7 (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool) (.constprop.0) Bridge.cpp:0:0
#22 0x0000000005032f9c (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#23 0x0000000005034dd4 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x5034dd4)
#24 0x0000000004e5e8c5 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x4e5e8c5)
#25 0x0000000004b66705 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x4b66705)
#26 0x0000000004b4da8f Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x4b4da8f)
#27 0x0000000004b6de9f Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x4b6de9f)
#28 0x0000000002cbb6b5 fc1_main(llvm::ArrayRef, char const*) (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x2cbb6b5)
#29 0x0000000002c0ac36 main (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x2c0ac36)
#30 0x000070d49362a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#31 0x000070d49362a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#32 0x0000000002cb9f55 _start (/cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin/flang-24+0x2cb9f55)
flang-24: error: unable to execute command: Aborted (core dumped)
flang-24: error: flang frontend command failed with exit code -2 (use -v to see invocation)
flang version 24.0.0git (https://github.com/llvm/llvm-project.git d770d1ee93075afb93b7b41705daf37144cd3bd6)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /cefs/25/25da7b40cec3cf1146176991_clang-llvmflang-trunk-20260901/bin
flang-24: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
flang-24: note: diagnostic msg: /tmp/example-b0b611
flang-24: note: diagnostic msg: /tmp/example-b0b611.sh
flang-24: note: diagnostic msg:
********************
flang-trunk - 3166ms
```
Trunk: https://godbolt.org/z/Pnb8YbMjv
Contributor guide
Research direction
Reproduce the crash with the provided input and flang command, then inspect the parser and lowering frames named in the stack trace, including ConvertExprToHLFIR.cpp and Bridge.cpp. Done means this input no longer terminates with basic_string::_M_construct null not valid and the regression is covered by a test.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100