Skip to content

flang optimizer ICE on -O1 or higher with array constructor argument #134308

Open
@bonachea

Description

@bonachea

flang-20 and flang/nightly snapshot are crashing on the following minimal reproducer using -O1 or higher:

Reproducer

cgpu$ cat flang-optimizer-bug.F90
program FlangOptimizerBug
   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

Demonstration (flang 20.1.0 linux/x86_64)

cgpu$ gfortran-14 flang-optimizer-bug.F90 && a.out
 To be   to      
 
cgpu$ gfortran-14 -O3 flang-optimizer-bug.F90 && a.out
 To be   to      
 
cgpu$ flang-20 flang-optimizer-bug.F90 && a.out               
 To be   to      
 
cgpu$ flang-20 -O1 flang-optimizer-bug.F90 && a.out
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x000056528bb88392 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x147a392)
 #1 0x000056528bb85856 SignalHandler(int) Signals.cpp:0:0
 #2 0x0000712027245330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #3 0x0000565290d7bad2 mlir::FloatType::getWidth() (/usr/local/pkg/llvm/20.1.0/bin/flang+0x666dad2)
 #4 0x0000565290df53bd mlir::Type::getIntOrFloatBitWidth() const (/usr/local/pkg/llvm/20.1.0/bin/flang+0x66e73bd)
 #5 0x000056528ce9484a (anonymous namespace)::makeMinMaxInitValGenerator(bool)::'lambda'(fir::FirOpBuilder, mlir::Location, mlir::Type)::operator()(fir::FirOpBuilder, mlir::Location, mlir::Type) const OptimizedBufferization.cpp:0:0
 #6 0x000056528cea2d2e (anonymous namespace)::ReductionConversion<hlfir::MaxvalOp>::matchAndRewrite(hlfir::MaxvalOp, mlir::PatternRewriter&) const OptimizedBufferization.cpp:0:0
 #7 0x000056528f745d30 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 0x000056528f6fddbb (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
 #9 0x000056528f6ff7df mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x4ff17df)
#10 0x000056528ce9747e (anonymous namespace)::OptimizedBufferizationPass::runOnOperation() OptimizedBufferization.cpp:0:0
#11 0x0000565290bb6ad6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x64a8ad6)
#12 0x0000565290bb6f59 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 0x0000565290bb8267 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 0x000056528f702d71 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 0x000056528f70350d 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 0x00007120272a1ed3 __pthread_once_slow ./nptl/pthread_once.c:118:7
#17 0x000056528f702f9e 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 0x000056528f703303 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 0x0000565290e5e152 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/usr/local/pkg/llvm/20.1.0/bin/flang+0x6750152)
#20 0x0000565290e5eb51 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#21 0x000071202729caa4 start_thread ./nptl/pthread_create.c:447:8
#22 0x0000712027329c3c 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/flang-optimizer-bug-bcf66a
flang-20: note: diagnostic msg: /tmp/flang-optimizer-bug-bcf66a.sh
flang-20: note: diagnostic msg: 

********************

cgpu$ cat /tmp/flang-optimizer-bug-bcf66a.sh
# Crash reproducer for clang version 20.1.0
# Driver args: "-O1" "flang-optimizer-bug.F90"
# Original command:  "/usr/local/pkg/llvm/20.1.0/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-resource-dir" "/usr/local/pkg/llvm/20.1.0/lib/clang/20" "-mframe-pointer=none" "-O1" "-o" "/tmp/flang-optimizer-bug-468e43.o" "-x" "f95-cpp-input" "flang-optimizer-bug.F90"
 "/usr/local/pkg/llvm/20.1.0/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-mframe-pointer=none" "-O1" "-x" "f95-cpp-input" "flang-optimizer-bug-bcf66a"
 
cgpu$ cat /tmp/flang-optimizer-bug-bcf66a
#line "./flang-optimizer-bug.F90" 1
      program FlangOptimizerBug
      character(len=*), parameter :: values(*) = [ "To be   ","or not  "&
     & , "to      ","be.     " , "that    ","is      " , "the     ","que&
     &stion"]


      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

flang-optimizer-bug.tar.gz

Demonstration (flang git 5929de8 linux/x86_64)

pm$ cat flang-optimizer-bug.F90
program FlangOptimizerBug
   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

pm$ flang -O0 flang-optimizer-bug.F90 && a.out
 To be   to      

pm$ flang -O1 flang-optimizer-bug.F90 && a.out 
flang: /global/homes/k/kateras/flang/flang-src/mlir/lib/IR/Types.cpp:123: unsigned int mlir::Type::getIntOrFloatBitWidth() const: Assertion `isIntOrFloat() && "only integers and floats have a bitwidth"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x000000000193574b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x193574b)
 #1 0x00000000019328cb llvm::sys::RunSignalHandlers() (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x19328cb)
 #2 0x00000000019329f1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f6d7b5b9910 __restore_rt (/lib64/libpthread.so.0+0x16910)
 #4 0x00007f6d7ac9cd2b raise (/lib64/libc.so.6+0x4ad2b)
 #5 0x00007f6d7ac9e3e5 abort (/lib64/libc.so.6+0x4c3e5)
 #6 0x00007f6d7ac94c6a __assert_fail_base (/lib64/libc.so.6+0x42c6a)
 #7 0x00007f6d7ac94cf2 (/lib64/libc.so.6+0x42cf2)
 #8 0x000000000703e8c6 mlir::Type::getIntOrFloatBitWidth() const (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x703e8c6)
 #9 0x0000000002cb9c6a (anonymous namespace)::makeMinMaxInitValGenerator(bool)::'lambda'(fir::FirOpBuilder, mlir::Location, mlir::Type)::operator()(fir::FirOpBuilder, mlir::Location, mlir::Type) const OptimizedBufferization.cpp:0:0
#10 0x0000000002cbfc0f (anonymous namespace)::ReductionConversion<hlfir::MaxvalOp>::matchAndRewrite(hlfir::MaxvalOp, mlir::PatternRewriter&) const OptimizedBufferization.cpp:0:0
#11 0x00000000057ae2aa 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&)>) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x57ae2aa)
#12 0x0000000005776e6f (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#13 0x0000000005779cd2 mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x5779cd2)
#14 0x0000000002cb855e (anonymous namespace)::OptimizedBufferizationPass::runOnOperation() OptimizedBufferization.cpp:0:0
#15 0x0000000006dc839e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x6dc839e)
#16 0x0000000006dc8838 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x6dc8838)
#17 0x0000000006dc8c35 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#18 0x0000000006dc8dff 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
#19 0x000000000577d26d 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&) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x577d26d)
#20 0x000000000577dcdb 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*) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x577dcdb)
#21 0x00007f6d7b5b65d7 __pthread_once_slow (/lib64/libpthread.so.0+0x135d7)
#22 0x000000000577dc51 std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x577dc51)
#23 0x000000000577d8f3 std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x577d8f3)
#24 0x00000000070b4e67 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang+0x70b4e67)
#25 0x00000000070b5c48 void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#26 0x00007f6d7b5ad6ea start_thread (/lib64/libpthread.so.0+0xa6ea)
#27 0x00007f6d7ad6a58f clone (/lib64/libc.so.6+0x11858f)
flang-21: error: unable to execute command: Aborted
flang-21: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 21.0.0git ([email protected]:llvm/llvm-project.git 5929de8c7731748bf58ad9b1fedfed75e7aae455)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /global/cfs/cdirs/m2878/flang/flang-main/install/bin
Build config: +assertions
flang-21: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-21: note: diagnostic msg: /dev/shm/flang-optimizer-bug-191e02
flang-21: note: diagnostic msg: /dev/shm/flang-optimizer-bug-191e02.sh
flang-21: note: diagnostic msg: 

********************

pm$ cat /dev/shm/flang-optimizer-bug-191e02
#line "./flang-optimizer-bug.F90" 1
      program FlangOptimizerBug
      character(len=*), parameter :: values(*) = [ "To be   ","or not  "&
     & , "to      ","be.     " , "that    ","is      " , "the     ","que&
     &stion"]


      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

pm$ cat /dev/shm/flang-optimizer-bug-191e02.sh
# Crash reproducer for clang version 21.0.0git ([email protected]:llvm/llvm-project.git 5929de8c7731748bf58ad9b1fedfed75e7aae455)
# Driver args: "-O1" "flang-optimizer-bug.F90"
# Original command:  "/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-resource-dir" "/global/cfs/cdirs/m2878/flang/flang-main/install/lib/clang/21" "-mframe-pointer=none" "-O1" "-o" "/dev/shm/flang-optimizer-bug-764025.o" "-x" "f95-cpp-input" "flang-optimizer-bug.F90"
 "/global/cfs/cdirs/m2878/flang/flang-main/install/bin/flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu" "-emit-obj" "-fcolor-diagnostics" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "x86-64" "-mframe-pointer=none" "-O1" "-x" "f95-cpp-input" "flang-optimizer-bug-191e02"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions