-
Notifications
You must be signed in to change notification settings - Fork 13
Closed
Description
PR #158 implements the PRIF 0.5 collectives and rewrites the collectives tests to match.
Currently building that branch using flang 20 and flang nightly snapshots with optimization (such as enabled by the deprecated -Ofast option) leads to an ICE like the one shown below.
flang-20: warning: argument '-Ofast' is deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior, or '-O3 -fstack-arrays' to enable only conforming optimizations [-Wdeprecated-ofast]
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
#0 0x0000644cac508392 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x147a392)
#1 0x0000644cac505856 SignalHandler(int) Signals.cpp:0:0
#2 0x000077a4f4045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#3 0x0000644cb16fbad2 mlir::FloatType::getWidth() (/usr/local/pkg/llvm/20.1.0/bin/flang+0x666dad2)
#4 0x0000644cb17753bd mlir::Type::getIntOrFloatBitWidth() const (/usr/local/pkg/llvm/20.1.0/bin/flang+0x66e73bd)
#5 0x0000644cad81484a (anonymous namespace)::makeMinMaxInitValGenerator(bool)::'lambda'(fir::FirOpBuilder, mlir::Location, mlir::Type)::operator()(fir::FirOpBuilder, mlir::Location, mlir::Type) const OptimizedBufferization.cpp:0:0
#6 0x0000644cad822d2e (anonymous namespace)::ReductionConversion<hlfir::MaxvalOp>::matchAndRewrite(hlfir::MaxvalOp, mlir::PatternRewriter&) const OptimizedBufferization.cpp:0:0
#7 0x0000644cb00c5d30 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x5037d30)
#8 0x0000644cb007ddbb (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#9 0x0000644cb007f7df mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff17df)
#10 0x0000644cad81747e (anonymous namespace)::OptimizedBufferizationPass::runOnOperation() OptimizedBufferization.cpp:0:0
#11 0x0000644cb1536ad6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x64a8ad6)
#12 0x0000644cb1536f59 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x64a8f59)
#13 0x0000644cb1538267 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
#14 0x0000644cb0082d71 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&) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff4d71)
#15 0x0000644cb008350d 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*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff550d)
#16 0x000077a4f40a1ed3 __pthread_once_slow ./nptl/pthread_once.c:118:7
#17 0x0000644cb0082f9e std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff4f9e)
#18 0x0000644cb0083303 std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff5303)
#19 0x0000644cb17de152 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x6750152)
#20 0x0000644cb17deb51 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#21 0x000077a4f409caa4 start_thread ./nptl/pthread_create.c:447:8
#22 0x000077a4f4129c3c clone3 ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:80:0
flang-20: error: unable to execute command: Segmentation fault
flang-20: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 20.1.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/pkg/llvm/20.1.0/bin
The problem appears to be confined to test files test_prif_co_{min,max}_test.F90, and based on some simple narrowing appears to be caused by compiling the check_character() function (regardless of whether it's called). Also the -O1 option is sufficient to demonstrate the crash.
Here is a minimal reproducer:
program Ofastbug
character(len=*), parameter :: values(*) = &
[ "To be ","or not " &
, "to ","be. " &
, "that ","is " &
, "the ","question"]
integer :: me, ni, i
character(len=len(values)) :: my_val, expected
me = 1
ni = 8
my_val = values(mod(me-1, size(values))+1)
expected = maxval([(values(mod(i-1,size(values))+1), i = 1, ni)])
print *, my_val, expected
end program
and the ICE from compiling with flang 20:
cgpu$ flang-20 -O0 llvm-Ofast-bug.F90 && a.out
To be to
cgpu$ flang-20 -O1 llvm-Ofast-bug.F90 && a.out
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
#0 0x0000622a34db2392 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x147a392)
#1 0x0000622a34daf856 SignalHandler(int) Signals.cpp:0:0
#2 0x0000705e56245330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#3 0x0000622a39fa5ad2 mlir::FloatType::getWidth() (/usr/local/pkg/llvm/20.1.0/bin/flang+0x666dad2)
#4 0x0000622a3a01f3bd mlir::Type::getIntOrFloatBitWidth() const (/usr/local/pkg/llvm/20.1.0/bin/flang+0x66e73bd)
#5 0x0000622a360be84a (anonymous namespace)::makeMinMaxInitValGenerator(bool)::'lambda'(fir::FirOpBuilder, mlir::Location, mlir::Type)::operator()(fir::FirOpBuilder, mlir::Location, mlir::Type) const OptimizedBufferization.cpp:0:0
#6 0x0000622a360ccd2e (anonymous namespace)::ReductionConversion<hlfir::MaxvalOp>::matchAndRewrite(hlfir::MaxvalOp, mlir::PatternRewriter&) const OptimizedBufferization.cpp:0:0
#7 0x0000622a3896fd30 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x5037d30)
#8 0x0000622a38927dbb (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#9 0x0000622a389297df mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff17df)
#10 0x0000622a360c147e (anonymous namespace)::OptimizedBufferizationPass::runOnOperation() OptimizedBufferization.cpp:0:0
#11 0x0000622a39de0ad6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x64a8ad6)
#12 0x0000622a39de0f59 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x64a8f59)
#13 0x0000622a39de2267 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
#14 0x0000622a3892cd71 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&) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff4d71)
#15 0x0000622a3892d50d 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*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff550d)
#16 0x0000705e562a1ed3 __pthread_once_slow ./nptl/pthread_once.c:118:7
#17 0x0000622a3892cf9e std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff4f9e)
#18 0x0000622a3892d303 std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff5303)
#19 0x0000622a3a088152 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x6750152)
#20 0x0000622a3a088b51 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#21 0x0000705e5629caa4 start_thread ./nptl/pthread_create.c:447:8
#22 0x0000705e56329c3c clone3 ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:80:0
flang-20: error: unable to execute command: Segmentation fault
flang-20: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 20.1.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/pkg/llvm/20.1.0/bin
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/llvm-Ofast-bug-dda454
flang-20: note: diagnostic msg: /tmp/llvm-Ofast-bug-dda454.sh
flang-20: note: diagnostic msg:
********************
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels