у lvm есть MachineVerifier
проход, который проверяет MachineFunction
для корректности на основе различных параметров, таких как: Живучесть, мертвый базовый блок, правильный класс регистра и т.д. Недавно я столкнулся с этой ошибкой из прохода MachineVerifier.
Мне интересно, почему не хорошо иметь несколько преемников посадочной площадки?
В примере я получаю эту ошибку, макет (IR) выглядит следующим образом;
BB0:
...
succ: BB1BB1: EH_LANDING_PAD
pred: BB0, BB1
...
succ: BB1, BB2BB2: 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.
Означает ли это, что в случае возникновения исключения обработка исключения будет неоднозначной. Может кто-нибудь, пожалуйста, объясните. Благодарю.
Да. Несколько посадочных площадок запрещено. посадочная площадка — то, где исключение приземляется размотчиком. Строго говоря, нет проблем обработки посадочных площадок с непересекающимися типами информации, но когда вы, например, имеете. очистка или фильтр вы можете закончить в беде …
Других решений пока нет …