0

llvm 有一个MachineVerifierpass,它MachineFunction根据不同的参数检查 a 的正确性,例如:livenessdead Basic Block正确的寄存器类等。最近我在 MachineVerifier pass 中遇到了这个错误。我想知道为什么不能有多个着陆垫继任者?在示例中,我收到此错误,布局(IR)是这样的;

BB0: 
...
succ: BB1


BB1: EH_LANDING_PAD
pred: BB0, BB1
...
succ: BB1, BB2


BB2: EH_LANDING_PAD
...

 Bad machine code: MBB has more than one landing pad successor ***
   - function:    _Z7ex_testv
   - basic block: BB#1 lpad (0x1bf7c90)
   LLVM ERROR: Found 1 machine code errors.

是不是意味着如果发生异常,异常处理就会模棱两可。有人可以解释一下。谢谢。

4

1 回答 1

2

是的。禁止使用多个着陆垫。着陆台是放卷机将异常着陆的地方。严格来说,使用不相交的类型信息处理着陆垫是没有问题的,但是当您进行清理或过滤时,您可能会遇到麻烦......

于 2013-05-09T10:51:56.623 回答