Skip to content

[LoopSimplifyCFG] null Preheader deref #149679

@jacobly0

Description

@jacobly0
define void @repro() {
  indirectbr ptr null, [ label %A, label %B ]
A:
  br i1 false, label %B, label %C
B:
  unreachable
C:
  br i1 true, label %A, label %B
}
$ opt --version
LLVM (http://llvm.org/):
  LLVM version 22.0.0git
  DEBUG build with assertions.
  Default target: x86_64-unknown-linux-gnu
  Host CPU: znver5
$ opt -passes=loop-simplifycfg reduced.ll
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: opt -passes=loop-simplifycfg reduced.ll
1.	Running pass "function(loop(loop-simplifycfg))" on module "reduced.ll"
2.	Running pass "loop(loop-simplifycfg)" on function "repro"
 #0 0x00007f12e7e16396 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm/lib/Support/Unix/Signals.inc:834:11
 #1 0x00007f12e7e1697f PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:918:1
 #2 0x00007f12e7e146a0 llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:104:5
 #3 0x00007f12e7e16f82 SignalHandler(int, siginfo_t*, void*) llvm/lib/Support/Unix/Signals.inc:426:38
 #4 0x00007f12e7624750 (/usr/lib64/libc.so.6+0x3d750)
 #5 0x00007f12eaf14629 llvm::detail::PunnedPointer<llvm::ilist_node_base<true, llvm::BasicBlock>*>::asInt() const llvm/include/llvm/ADT/PointerIntPair.h:41:5
 #6 0x00007f12eaf145d9 llvm::detail::PunnedPointer<llvm::ilist_node_base<true, llvm::BasicBlock>*>::operator long() const llvm/include/llvm/ADT/PointerIntPair.h:45:41
 #7 0x00007f12eaf14579 llvm::PointerIntPair<llvm::ilist_node_base<true, llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true, llvm::BasicBlock>*>, llvm::PointerIntPairInfo<llvm::ilist_node_base<true, llvm::BasicBlock>*, 1u, llvm::PointerLikeTypeTraits<llvm::ilist_node_base<true, llvm::BasicBlock>*>>>::getPointer() const llvm/include/llvm/ADT/PointerIntPair.h:94:58
 #8 0x00007f12eaf14559 llvm::ilist_detail::node_base_prevnext<llvm::ilist_node_base<true, llvm::BasicBlock>, true>::getPrev() const llvm/include/llvm/ADT/ilist_node_base.h:41:31
 #9 0x00007f12eaf14539 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>>::getPrev() const llvm/include/llvm/ADT/ilist_node.h:123:5
#10 0x00007f12eaf144fd llvm::ilist_sentinel<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>>::empty() const llvm/include/llvm/ADT/ilist_node.h:319:45
#11 0x00007f12eaf14429 llvm::simple_ilist<llvm::Instruction, llvm::ilist_iterator_bits<true>, llvm::ilist_parent<llvm::BasicBlock>>::empty() const llvm/include/llvm/ADT/simple_ilist.h:139:38
#12 0x00007f12eaf143c1 llvm::BasicBlock::getTerminator() const llvm/include/llvm/IR/BasicBlock.h:234:26
#13 0x00007f12eaf11e99 llvm::BasicBlock::getTerminator() llvm/include/llvm/IR/BasicBlock.h:239:5
#14 0x00007f12eb21b8c4 (anonymous namespace)::ConstantTerminatorFoldingImpl::handleDeadExits() llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:353:31
#15 0x00007f12eb21abb9 (anonymous namespace)::ConstantTerminatorFoldingImpl::run() llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:601:5
#16 0x00007f12eb21a25e constantFoldTerminators(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::ScalarEvolution&, llvm::MemorySSAUpdater*, bool&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:654:8
#17 0x00007f12eb21a111 simplifyLoopCFG(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::ScalarEvolution&, llvm::MemorySSAUpdater*, bool&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:700:14
#18 0x00007f12eb219fc3 llvm::LoopSimplifyCFGPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:721:7
#19 0x00007f12ee841768 llvm::detail::PassModel<llvm::Loop, llvm::LoopSimplifyCFGPass, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#20 0x00007f12eb208307 std::__1::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::__1::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::__1::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::__1::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::__1::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) llvm/include/llvm/Transforms/Scalar/LoopPassManager.h:375:7
#21 0x00007f12eb206c03 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:165:10
#22 0x00007f12eb206497 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:0:32
#23 0x00007f12ee744ad8 llvm::detail::PassModel<llvm::Loop, llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#24 0x00007f12eb2075a7 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/lib/Transforms/Scalar/LoopPassManager.cpp:305:17
#25 0x00007f12f5907238 llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#26 0x00007f12e895a2eb llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerImpl.h:80:5
#27 0x00007f12f58e7308 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#28 0x00007f12e8958c75 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/lib/IR/PassManager.cpp:127:38
#29 0x00007f12f58e7bb8 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerInternal.h:91:17
#30 0x00007f12e895923b llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerImpl.h:80:5
#31 0x00007f12f75e5619 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::__1::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) llvm/tools/opt/NewPMDriver.cpp:557:3
#32 0x00007f12f76234a1 optMain llvm/tools/opt/optdriver.cpp:744:12
#33 0x00005587e9d895d9 main llvm/tools/opt/opt.cpp:25:42
#34 0x00007f12e760e3fb (/usr/lib64/libc.so.6+0x273fb)
#35 0x00007f12e760e4ab __libc_start_main (/usr/lib64/libc.so.6+0x274ab)
#36 0x00005587e9d894e5 _start (opt+0x24e5)

Reproduces with both 20.1.8 and 07100c6.

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashPrefer [crash-on-valid] or [crash-on-invalid]loopoptim

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions