Next: Temporaries, Previous: GIMPLE instruction set, Up: GIMPLE
其它异常处理结构使用GIMPLE_TRY_CATCH
来表示。GIMPLE_TRY_CATCH
有两个操作数。第一个操作数为一个要执行的语句序列。如果执行这些语句并没有抛出异常,则第二个操作数被忽略。否则,如果有异常被抛出,则GIMPLE_TRY_CATCH
的第二个操作数将被检查。第二个操作数可以具有以下形式:
GIMPLE_CATCH
语句序列。每个GIMPLE_CATCH
有一个可适用的异常类型列表和处理代码。如果被抛出的异常匹配其中一个类型,则相关的处理代码被执行。如果处理代码执行到结尾并结束,则在最初的GIMPLE_TRY_CATCH
之后继续执行。
GIMPLE_EH_FILTER
语句。具有一个允许的异常类型列表,和当匹配失败时的处理代码。如果被抛出的异常不匹配所允许的类型之一,则相关的匹配失败代码会被执行。如果抛出的异常确实匹配,则继续查找下一个处理。
目前抛出异常并不直接用GIMPLE来表示,而是通过调用一个函数来实现。将来的某个时候,我们将增加某种方式来表示抛出已知类型的异常的调用。
就在运行优化器之前,编译器将高级别的EH结构下降为一组‘goto’,魔术标号,以及EH区域。