[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