llvm错误:找到了多个登陆垫后继者

时间:2013-05-09 03:45:16

标签: c++ compiler-construction exception-handling llvm intermediate-language

llvm有MachineVerifier次传递,根据不同的参数检查MachineFunction的正确性,例如:活跃死基本块正确的寄存器类等。最近我从MachineVerifier传递中遇到了这个错误。 我想知道为什么不能有多个着陆垫接班人? 在示例中,我收到此错误,布局(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.

这是否意味着如果发生异常,异常处理将是不明确的。有人可以解释一下。感谢。

1 个答案:

答案 0 :(得分:2)

是。禁止多个着陆垫。起落架是退绕器落下的例外。严格地说,没有处理具有非交叉类型信息的着陆垫的问题,但是当你有例如清理或过滤你可能会遇到麻烦......