<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147869>147869</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
`loop-simplifycfg` optimisation pass segfaults on IR using `indirectbr`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
triallax
</td>
</tr>
</table>
<pre>
I first had this issue with Zig, corresponding issue on the Zig tracker is https://github.com/ziglang/zig/issues/24383, but I've been told this is likely an LLVM problem so I'm reporting it here as well.
LLVM version is 20.1.7, distro is Chimera Linux.
Failing IR (reduced with `llvm-reduce`):
```
; ModuleID = 'reduced.bc'
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux6.15.2-musl"
define fastcc void @vm.VM.runNoClear() {
Entry:
indirectbr ptr null, [label %Case, label %Case38]
Case: ; preds = %Then104, %Entry
ret void
Case38: ; preds = %Then104, %Entry
br i1 true, label %Then104, label %Else66
Then104: ; preds = %Case38
indirectbr ptr null, [label %Case, label %Case38]
Else66: ; preds = %Case38
unreachable
}
```
To get the segfault, run:
```console
$ llvm-as reduced.ll
$ opt -passes=loop-simplifycfg -disable-output reduced.bc
```
Here's the full backtrace:
```
* thread #1, name = 'opt', stop reason = SIGSEGV: address not mapped to object (fault address=0x30)
* frame #0: 0x00007536157612aa libLLVM.so.20.1`::run() [inlined] getPrev at ilist_node_base.h:27:38
frame #1: 0x00007536157612aa libLLVM.so.20.1`::run() [inlined] getPrev at ilist_node.h:121:59
frame #2: 0x00007536157612aa libLLVM.so.20.1`::run() [inlined] empty at ilist_node.h:313:45
frame #3: 0x00007536157612aa libLLVM.so.20.1`::run() [inlined] empty at simple_ilist.h:139:54
frame #4: 0x00007536157612aa libLLVM.so.20.1`::run() [inlined] getTerminator at BasicBlock.h:241:18
frame #5: 0x00007536157612a6 libLLVM.so.20.1`::run() [inlined] getTerminator at BasicBlock.h:247:48
frame #6: 0x00007536157612a6 libLLVM.so.20.1`::run() [inlined] handleDeadExits at LoopSimplifyCFG.cpp:353:31
frame #7: 0x000075361576128a libLLVM.so.20.1`::run() [inlined] run at LoopSimplifyCFG.cpp:602:5
frame #8: 0x0000753615760109 libLLVM.so.20.1`::run() [inlined] constantFoldTerminators at LoopSimplifyCFG.cpp:655:31
frame #9: 0x000075361575f68b libLLVM.so.20.1`::run() [inlined] simplifyLoopCFG at LoopSimplifyCFG.cpp:701:14
frame #10: 0x000075361575f68b libLLVM.so.20.1`::run() at LoopSimplifyCFG.cpp:722:8
frame #11: 0x0000753618bb92b2 libLLVM.so.20.1`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&) at PassManagerInternal.h:91:17
frame #12: 0x0000753615757aec libLLVM.so.20.1`::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 &> > > >() at LoopPassManager.h:375:32
frame #13: 0x0000753615757841 libLLVM.so.20.1`::runWithoutLoopNestPasses() at LoopPassManager.cpp:160:9
frame #14: 0x000075361575657d libLLVM.so.20.1`::run() at LoopPassManager.cpp:31:32
frame #15: 0x0000753618b3ddf2 libLLVM.so.20.1`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&) at PassManagerInternal.h:91:17
frame #16: 0x00007536157587a1 libLLVM.so.20.1`::run() at LoopPassManager.cpp:302:38
frame #17: 0x0000753617201982 libLLVM.so.20.1`llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) at PassManagerInternal.h:91:17
frame #18: 0x000075361419e634 libLLVM.so.20.1`::run() at PassManagerImpl.h:81:38
frame #19: 0x00007536171d7512 libLLVM.so.20.1`llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) at PassManagerInternal.h:91:17
frame #20: 0x00007536141a3e94 libLLVM.so.20.1`::run() at PassManager.cpp:124:38
frame #21: 0x00007536171ec972 libLLVM.so.20.1`llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) at PassManagerInternal.h:91:17
frame #22: 0x000075361419cc4b libLLVM.so.20.1`::run() at PassManagerImpl.h:81:38
frame #23: 0x00005af58f144970 opt`::runPassPipeline() at NewPMDriver.cpp:541:7
frame #24: 0x00005af58f135f34 opt`::optMain() at optdriver.cpp:739:12
frame #25: 0x000075361d1f0d7d ld-musl-x86_64.so.1`libc_start_main_stage2(main=(opt`main), argc=<unavailable>, argv=0x00007ffc033f4558) at __libc_start_main.c:95:7
frame #26: 0x00005af58f1314c6 opt`_start + 22
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWV9v27oV_zTMC2FDJEVJfvCDEzddgOYiaLsO2ItBicc2b2lSI6k02acfSNmxYzm5cW86YHdF60oUdX6_81eHpPBerQzAFPFLxOcXogtr66bBKaG1eLiorXyc3uClcj7gtZA4rJXHyvsO8A8V1vifaoXoFW6sc-Bba6Qyq-1za3BYQ5yBgxPNd3BYebwOofWIzRC9RvR6pcK6q8eN3SB6_W-10sKs-itEr5MYj-g1zVnFIkzdBXyDaHkPuAYwOFj9RAlr9R30IxYGf_r07Ra3ztYaNtjb9MoGO2itC4lfwGtwgIXHP0DrMcpmKJult-7BeWVNlEezMRmXEVYqH5yNY1drtQEn8Cdluofte9dC6Sj15jNGtHIguwZkbx1UZFrfb0b9ICoyRCdR92wWr_u_2QyxS3xrZafhZo4Rm2NEy62Ycd0gWqJsFoRbQcBSBKHFo-3CdiKF0QaxGYxaWmaIzRhNP_GWPL-NV0Wefkbq6YLQCrEZodVoWWXbK5OGit3rRT76EqdRuucRnGo17Dg8VMWiyEed-W7sDzPS0TjFmPAxHW06r_s3UTaTsFQG8FL40DT43iqJUZ7db8bfbseuM7_ZKw3CoYg1wai8RNnsgwnusTcZxspI5aAJtcNtcNh0Wkf3IH6pRQ0aI8qvhIc49myAVYjPewrpOZvhc_5E_7QOpN_qy7-uwZAsT9iU9xQjPwchabWHYtGUbxdQO6wIDq57rsPB9KexD9pDUfRIu-fn6DXgtKX7Tnbe0jul_B6oMw5Esxa1hvhWOT9OjGz21eIUb2vAHlZL0ekQYV1njvKoscbbXg7Ncco64fEujbTePrBtwKNWeA8esbm2th15tWm1Wj42yxUeSeUjnZHtQtsFfJCGA2p_AweIlj6RW3Za41o032OpgxM5Tmc4rB0IiRFlJOpgxGaXQaVtQ8xzeoV9sC12ILw16eGXm49fPnz8Fi0ppHTgPTY24I1oW5A4WGzr36EJsfQk6-xmITbPHlgqONGlEX_pEiJlMdFx9pBlWVZyVhBeFoQKgbWqYxEcezuOxS8yZzPEZtHa26Tkl8poZUAiPo-euXNwj0XASisfFsZKWNTCw3iN2IyWsYT0IYX36ORXoidgQiMGnxwj03dChk0bHk_gMsIQm-X8GJe9N24KWVgk-F5jFr8rPD9Gzt_P1l_BbZQRwbrI4FJ41Vxq23zvXZ1Hi5OBr_lJ_OIX4MdYywf4xTvhr4WRGuYg5IcHFXxk8Mna9su2dFxdfxw3bRtDgLMUCMdEylNEqvMd4TrzMniRxQgfhF81xM5INjkbO5bYIEy4tlruvfGKMQrOTxpjMiDEl0VVn01oV7kj-tX1x5eJlFkKz0F6kGElfCuTl7FodMKw6h2XvaquJ7SmJ6Dix6uHkxCE0v31nfD-1krQiF3tZ0QO6Tv8bOSAVXzt-YSZEfrRK38rjFiBe4u4IIwUTu7e_Ay-08EjWiD24azpz-fe3f69lSKA20o6MPExpeIX63BM7afV6EMjOavndmMCOCN0qlOTFIflIDiGXyZeCmhei8Mvyqw0JPee0t4H2Q8sFqS_6Iz6VweLNjw313GMXVnTQBv-wKTv5gB8ZhThV-x_IGuovoTUHy0kaAjwFzcBPvj3vGAdRGbfs5S8X-gdh-SwaeFllZPXQvIfKqxtFyLMb-DDXd9mvwjf10uSBKRebQ8-7Ft4wUv59ro8xGHktJ7HLUpVMymX71-XDxj9twLr3Qv0_wjN_9_vyLDf5VUpXk3aP8yb1FT2y7g90HE_W9KMTKo_mzXXnWmCsua5YXajX-2O4UyKNlj3dl8-CY7R8UKA7MHPCJJDwed4bW_J4-48JxMoWP42lx0ibdoepSKnl93HXXdJZMnJr3HZS8Xu9OwzPPcX8Dg9XnTkRDCYnO_x3QeU5icdTo9XHCWBZlL-WYf3O9XP7dWPfbU72_xUjm4Fv-KvHfQZ3toL_TlfHTfmOZk0Tf7GBeIZ2UkP2i0ulrxakjyflBm2bTgUHkXeqRbiGngP9Bv8uLudO3X_FBQ8bcgMPhA0H8AwvmT5MxjbhluhDvSwbZCHwsu0gieDXooe91KSLDMZ2zaZDgJG_UFBNFqKOlU3Cx-EC4uNUCZeroAiWsU7xOaIVj2tdE8n0evCrZr4iF11RtwLpdPmcV8YhFvdp23PhL9cNhljy5zznRqLxRHiuIlu5ztD7fUohlYieVNsrdRLwIhe4v5kY7fPeyGnTE7YRFzAlJScEpJVBb1YT4tyUgnOJCnEJCN0WWQFIbSq8wmrc1axCzWlGeVZSbKM0DKnY84IrzKxJJwyzolAeQYbofQ4hvbYutVFOh2bkrysislF2ob36RSPUgM_-iM4RCni8ws3TdvhdbfyKM-08sHvxQQVNEyjN472wlGRgk9tlBcxp3ErvH_ahPfYGnzzGXdemRVGRbY_M4iG6JyevnLSl_Kz_2_UOvs7NOHwvG-r1P2U_icAAP__l1Fzmw">