Issue 87625
Summary opt crash - segmentation fault in RewriteStatepointsForGC.cpp
Labels new issue
Assignees
Reporter Chronostasys
    LLVM version: 18.1.2

system info: MacBook Pro(M2)  macOS 14.1 (23B74)

command:
```bash
opt -S -passes=rewrite-statepoints-for-gc test.ll
```

code:
```llvm


define void @fn1() gc "statepoint-example" {
  %r28 = alloca i8, addrspace(1)
  call void @fn2(i8 addrspace(1)* %r28)
  ret void
}

declare void @fn2(i8 addrspace(1)*)
```

stacktrace:
```log
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -S -passes=rewrite-statepoints-for-gc test.ll
 #0 0x0000000109c054a0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x1494a0)
 #1 0x0000000109c0374c llvm::sys::RunSignalHandlers() (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x14774c)
 #2 0x0000000109c05b54 SignalHandler(int) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x149b54)
 #3 0x0000000185363a24 (/usr/lib/system/libsystem_platform.dylib+0x180467a24)
 #4 0x000000010ac087ec findBaseOrBDV(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x114c7ec)
 #5 0x000000010ac087ec findBaseOrBDV(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x114c7ec)
 #6 0x000000010ac0964c std::__1::__function::__func<findBasePointer(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&)::$_3, std::__1::allocator<findBasePointer(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&)::$_3>, void (llvm::Value*)>::operator()(llvm::Value*&&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x114d64c)
 #7 0x000000010ac08bf8 findBasePointer(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&)::$_8::operator()(llvm::Value*, std::__1::function<void (llvm::Value*)>) const (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x114cbf8)
 #8 0x000000010ac07478 findBasePointer(llvm::Value*, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x114b478)
 #9 0x000000010ac01030 insertParsePoints(llvm::Function&, llvm::DominatorTree&, llvm::TargetTransformInfo&, llvm::SmallVectorImpl<llvm::CallBase*>&, llvm::MapVector<llvm::Value*, llvm::Value*, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, llvm::Value*>, 0u>>&, llvm::MapVector<llvm::Value*, bool, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::__1::pair<llvm::Value*, bool>, 0u>>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x1145030)
#10 0x000000010abfff64 llvm::RewriteStatepointsForGC::runOnFunction(llvm::Function&, llvm::DominatorTree&, llvm::TargetTransformInfo&, llvm::TargetLibraryInfo const&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x1143f64)
#11 0x000000010abfee78 llvm::RewriteStatepointsForGC::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x1142e78)
#12 0x0000000109db009c llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/local/libexec/llvm-18/lib/libLLVM.dylib+0x2f409c)
#13 0x000000010225dea4 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/opt/local/libexec/llvm-18/bin/opt+0x100005ea4)
#14 0x000000010226b7f4 main (/opt/local/libexec/llvm-18/bin/opt+0x1000137f4)
#15 0x0000000184fb90e0 
[1]    86308 segmentation fault  opt -S -passes=rewrite-statepoints-for-gc test.ll
```


This is quite similar to #61917, but I'm not sure if they are the same.

I'm just trying to write a pass that analyzes if heap allocations are necessary and replaces the results with stack allocas. The crash takes place just after the replacement.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to