<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117767>117767</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Crash in sinkCommonCodeFromPredecessors(llvm::BasicBlock*, llvm::DomTreeUpdater*) lib/Transforms/Utils/SimplifyCFG.cpp:2475:20
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hiraditya
</td>
</tr>
</table>
<pre>
Encountered this while debugging a pending issue in #103688. I modified llvm a bit
```diff
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 509b6d622655..c5d4ee453184 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -871,6 +871,7 @@ static bool
CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ,
const SmallPtrSetImpl<BasicBlock *> &BBPreds) {
assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
+ return false;
LLVM_DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
<< Succ->getName() << "\n");
```
With this patch the following testcase fails
```cpp
#include<stdio.h>
__attribute__((noinline))
int foo(int state) {
void* bytecode[2];
bytecode[0] = &&VM__OP_1;
bytecode[1] = &&VM__TERMINATE;
//int state = 0;
int index = 0;
while (1) {
if (state==0) {
goto *bytecode[index];
}
if (state == 1) {
//printf("Unreachable\n");
// NOTE: THIS IS ONLY REACHABLE VIA INDIRECT GOTOS
VM__OP_1:
printf("VM__OP_1\n");
state = 2;
}
else if (state== 2) {
printf("OP_1:(instruction=%d)\n", index);
index++;
goto *bytecode[index];
}
}
VM__TERMINATE:
printf("TERMINATE:(instruction=%d)\n", index);
return 0;
}
int main() {
foo(0);
return 0;
}
```
$ ./bin/clang++ noswitch.cpp -O3
```
4. Running pass "simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>" on function "_Z3fooi"
#0 0x000055810039ca2c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
#1 0x000055810039ce6a PrintStackTraceSignalHandler(void*) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x000055810039a5f0 llvm::sys::RunSignalHandlers() /usr/local/user/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x000055810039c408 SignalHandler(int) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007fc55eb74590 (/lib/x86_64-linux-gnu/libc.so.6+0x3f590)
#5 0x00005580fd9a2bd0 llvm::Use::operator llvm::Value*() const /usr/local/user/llvm-project/llvm/include/llvm/IR/Use.h:65:37
#6 0x000055810057bc10 sinkCommonCodeFromPredecessors(llvm::BasicBlock*, llvm::DomTreeUpdater*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:2475:20
#7 0x0000558100595ea8 (anonymous namespace)::SimplifyCFGOpt::simplifyOnce(llvm::BasicBlock*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8323:49
#8 0x0000558100596209 (anonymous namespace)::SimplifyCFGOpt::run(llvm::BasicBlock*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8381:13
#9 0x0000558100596298 llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&, llvm::ArrayRef<llvm::WeakVH>) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8393:1
#10 0x000055810025ab74 iterativelySimplifyCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:264:7
#11 0x000055810025acf9 simplifyFunctionCFGImpl(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:282:15
#12 0x000055810025ae87 simplifyFunctionCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:310:41
#13 0x000055810025b4d9 llvm::SimplifyCFGPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:381:7
#14 0x00005581022921a6 llvm::detail::PassModel<llvm::Function, llvm::SimplifyCFGPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:3
#15 0x00005580ffc5a1fb llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWU1v4zjS_jXMhZBBkfo8-CA7dreBdCeIkx6878WgKErmRiYFkuok_35BSk5kJz07nZ2eHewGBkQXWVVPPSwWywo1RjSS8zmIFyC-vKC93Ss93wtNK2Gf6UWpquf5SjLVS8s1r6DdCwMf96LlsOJl3zRCNpDCjsvKjYQxPYdCQoBJiEiSZTO4gQdViVrwCrbt9wOksBQWAlSABA2fStQ1QIV7wCBohIUU4LVb7B6iBHh9p6k0tdIHA_D63orWPa8Uo-2MdR0sf249QIWQFX-CMcrLpEowTuJ4NmNxFXEexSTMIhgilEQRQEUQBD-LxwWHF8PnA9hAhECEYJClIcDLBAK8GIYpHKeMpVYwWCrVAlTAJZU3WnW0oZbfaF5xxo1R2qyVvvm8MQBnC2oEW7SKPUCAi8UC4CU8lW17xgBeOnNMSWPh9kDb9sbqLbebQ9cCsjxVAGQFAU4WC-fRAJxDkC6cOjWGawtwBnBhesZ2JW-EdCAWfhW5BOQSOn9OH2AXIPZfhYFSWeiUfABQ1dAphQBjgHNAFgOzUHPbawlr2ho-SF1CQQivrr592V2uFvefAM6qsjEehnO6BGTpHF0p9eBS1SpYq7ZyouPsYhEAsmq4_UoP_I0iFNIqNxg8vf0bl7pIfs8OiJfyJJ7jMXBjVPwm7H44Zh21zA25A9qqR4-aG8uo4bCmLm8m2se0I0Kytq84IEtjK6Fme0BWABW7HbVWi7K3fLfzoDKphGyF5A4Kzv2hsLBWCuDMjVyS8cm-wu9KVAAXsHy2nKmKg3iBQXw5bsBUjEB86TZ63OBvX3a765td-M7K8O3Ku9Xtl83X4m418uM0AF4DvH5B5TXQ0ZwTD-d5IvYzQ6UCOAsncYjaSYbofC6iaZDur1F-p4sJTm9_EiyEIL0cRxODx-wOz00OAXRaSFt79vG91JyyPS1bfp4SUxX49doxUcC7z5st3Gzh9der_4O3q2L5uVhcreC3TQE3Xy83t6vlHfx0fXe9HQ28kl68mJz6f5k_d_7KMH4vWt4a_pZDiCcRT90cIbicMlb3zAolnQ6OK-fz6H05bOEZB6PM11LywQ0angAVZ8lVnEM9mft5vGNROubf0avLzgP1BXCaFMM5Q_9K_7Q4ABzBGcDr0plbs5bKZrxlpDKPwrK9vw6DazKun6hHs4G7215KV0o6aoyrR0YculbUz6xuAFmWSvYmcKEHdq-52au2AuTSHd1a6Ueqq2BwFDAlK0AW4zdNZcMDqwLBDt2r2KqgVeqhdyKpggfOOyfoDCCLvRLGBkwdDkp6j2ZYNMhbRSsTGKs0N8GjsIPDoKZ9a4VsnAshH87VTcdZ31LLg9LdU140xjfol5pKth8cvS7uZad5JZh1p9G4gokxVBLWvfT773ja_T-plRLjBQAwQRA9IYRQHGchQiRnFDPf4rj0IYV5NsPgxqXY1lL2cKcpcxfC6yJNH3fKWM3pwRdAl1XWpwle90a7nsE1Bv4b12MnEXRa_YMze95YbPuuU-7mXd9L8eQEopG0NTMhGSBFigkgxQv88Bw-Tyg8wzoY-Exl1Trv2XgD_CqAeQZIEY748Bk-GtfoPXpve3kC8-XK_7cAHpG5a5UUIYoddWiERs6pi1AGz7n6dRsZhWTCUzSCSWsWx7xMozhH0HMwWnvKkl0SBa2Q_VPQyH6YYDOjZgnAC_RE6jhHQwfgDMav0aG6yikuqynx967lcgPVcU2t0pO5b7TtuU8QvwVDI_lzDBzblxfB5tbxYLhrZIrE7QNJR6TJyT7EaclCBF1ZWPqqsFQVX2t1mLbEJ6fvtaH1mJeTSC7V4U5zft9V1Dq0H875d7v97ViTlutPY4bhKD1JsfQ0tDzmNHO7SqWSzwfVGyjpgZvOF5R8wDyxet3Z8ZiMsmt5VnnOYv-lwWXEl57omGHZWXAJRvlHgtO9_A_GlLm-JiRjTPmbmPJsWq5eDfzRFLyjuuH2Bc5G1mo4UeNN8bvJOp0-pU4oaX5gp9CaPt_yGpDlq_A3Th--ffZ34i8mND-WNf_24IRPHNMyjaCwruSI77x93v6A0PV4Zb8J7q-h80-gaMtoS_UpRzfUHO8inETurhxpCs9pYnUOj8l25GK5_uR_wv_5PAnpbgDH1t-Opgy7bIpHnvA5TzxL3-Ppf4ojEiLfTowckTOOyqjK3wfrbLxfgn9IWSFp-2yE-UIlbbg-KTEvSq7I_DWR--J9PETRNHCMcxzSZAK94paKdmzmqTFfVMXb9wP40e56wj7EB1n9jYh-vznznAzeNtJyLWnrm7XccUxGjk-6yprFNKzLCeqJjT_A7H8peYduIC5zrWCYTX_AX1RzUuUkpxd8HqYEJ1Eap-HFfl5GdcgziuuwLBmusgrXaZaUCcdhHBKeX4g5RjgKQ5yEWZwTNMNViHJSxixOI1rHDESIH6hoZw7WTOnmwr_Gn4dhmibpRUtL3hr_LwKMJX8cXvL7F5mXF3ruYy37xoAItcJY82rGCtvy-VJTs4dC_srG_GOt9kWv2_ne2s7XMv-2rRF235czpg6T6nK6mz58Z3nk5_sc_zMAAP__ixSqiQ">