[llvm] [BasicBlockUtils] Handle funclets when detaching EH pad blocks (PR #157363)
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 13:48:59 PDT 2025
aeubanks wrote:
hi, we're seeing crashes after this patch:
```
$ cat /tmp/a.ll
target datalayout = "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32-a:0:32-S32"
target triple = "i386-pc-windows-msvc19.34.0"
%struct.foo = type { ptr, %struct.eggs, ptr }
%struct.eggs = type { ptr, ptr, ptr }
declare x86_thiscallcc ptr @quux(ptr, ptr, i32)
define x86_thiscallcc ptr @baz(ptr %arg, ptr %arg1, ptr %arg2, i1 %arg3, ptr %arg4) personality ptr null {
bb:
%alloca = alloca [2 x %struct.foo], align 4
%invoke = invoke x86_thiscallcc ptr @quux(ptr null, ptr null, i32 0)
to label %bb5 unwind label %bb10
bb5: ; preds = %bb
%getelementptr = getelementptr i8, ptr %arg, i32 20
%call = call x86_thiscallcc ptr null(ptr null, ptr null, i32 0)
br label %bb6
bb6: ; preds = %bb10, %bb5
%phi = phi ptr [ null, %bb10 ], [ null, %bb5 ]
ret ptr %phi
bb7: ; No predecessors!
%cleanuppad = cleanuppad within none []
%getelementptr8 = getelementptr i8, ptr %arg2, i32 -20
%icmp = icmp eq ptr %arg, null
br label %bb9
bb9: ; preds = %bb7
cleanupret from %cleanuppad unwind label %bb10
bb10: ; preds = %bb9, %bb
%phi11 = phi ptr [ %arg, %bb9 ], [ null, %bb ]
%cleanuppad12 = cleanuppad within none []
%getelementptr13 = getelementptr i8, ptr %phi11, i32 -20
store i32 0, ptr %phi11, align 4
br label %bb6
}
$ opt -p simplifycfg /tmp/a.ll
opt: ../../llvm/include/llvm/Support/Casting.h:662: decltype(auto) llvm::dyn_cast(From *) [To = llvm::BranchInst, From = llvm::Instruction]: Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' failed.
```
https://github.com/llvm/llvm-project/pull/157363
More information about the llvm-commits
mailing list