Skip to content

[Flang][OpenMP] crashes on invalid goto inside OpenMP sections block #143231

@k-arrows

Description

@k-arrows

Reproducer:
https://godbolt.org/z/jqxza73WP

!$omp sections
goto 10
!$omp section
10 print *, "Invalid jump"
!$omp end sections
end

Backtrace:

flang-21: warning: OpenMP support in flang is still experimental [-Wexperimental-option]
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x0000000003eadc28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x3eadc28)
 #1 0x0000000003eab7e4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x0000756304842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000000000939e7e0 mlir::Block::getParent() const (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x939e7e0)
 #4 0x00000000094481ea mlir::OpTrait::impl::verifyOneSuccessor(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x94481ea)
 #5 0x0000000007e1621c mlir::Op<mlir::cf::BranchOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::ZeroResults, mlir::OpTrait::OneSuccessor, mlir::OpTrait::VariadicOperands, mlir::OpTrait::OpInvariants, mlir::BranchOpInterface::Trait, mlir::ConditionallySpeculatable::Trait, mlir::OpTrait::AlwaysSpeculatableImplTrait, mlir::MemoryEffectOpInterface::Trait, mlir::OpTrait::IsTerminator>::verifyInvariants(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7e1621c)
 #6 0x0000000007e18c8e mlir::RegisteredOperationName::Model<mlir::cf::BranchOp>::verifyInvariants(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7e18c8e)
 #7 0x00000000094702fe (anonymous namespace)::OperationVerifier::verifyOnEntrance(mlir::Operation&) (.isra.0) Verifier.cpp:0:0
 #8 0x0000000009472792 (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) Verifier.cpp:0:0
 #9 0x0000000009473d76 mlir::verify(mlir::Operation*, bool) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x9473d76)
#10 0x000000000922dd13 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x922dd13)
#11 0x000000000922de79 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x922de79)
#12 0x000000000922f305 std::_Function_handler<void (), llvm::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&&)::'lambda'()>::_M_invoke(std::_Any_data const&) Pass.cpp:0:0
#13 0x0000000007c65c4e std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>>::_M_invoke(std::_Any_data const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7c65c4e)
#14 0x0000000007c662cb std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7c662cb)
#15 0x0000756304899ee8 (/lib/x86_64-linux-gnu/libc.so.6+0x99ee8)
#16 0x0000000007c65f61 std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7c65f61)
#17 0x0000000007c65cdf std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x7c65cdf)
#18 0x00000000094cca27 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin/flang+0x94cca27)
#19 0x00000000094cd531 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#20 0x0000756304894ac3 (/lib/x86_64-linux-gnu/libc.so.6+0x94ac3)
#21 0x0000756304926850 (/lib/x86_64-linux-gnu/libc.so.6+0x126850)
flang-21: error: unable to execute command: Segmentation fault (core dumped)
flang-21: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 21.0.0git (https://github.com/llvm/llvm-project.git de3a9ea510fecd501b4dd57534cf300d1c9622c9)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-llvmflang-trunk-20250606/bin
flang-21: warning: OpenMP support in flang is still experimental [-Wexperimental-option]
flang-21: note: diagnostic msg: 

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions