Hi, i'm developing a GCC-Plugin. And i don't understand why there is a "try_finally_expr" in a must_not_throw-Area in my AST. It happens in the destructors. Here is my AST: function_decl Exception::__dt_base 1: must_not_throw_expr(->void_type{void})[42] 0: statement_list(->void_type{void}) 0: bind_expr(->void_type{void})[42] 1: statement_list(->void_type{void}) 0: cleanup_point_expr(->void_type{void})[42] 0: expr_stmt(->void_type{void}) 0: convert_expr(->void_type{void}) 0: modify_expr(->pointer_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) 0: component_ref(->pointer_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) 0: indirect_ref(->record_type{Exception}) 0: nop_expr(->pointer_type->record_type{Exception}) 0: parm_decl(->pointer_type->record_type{Exception}) : this 1: field_decl(->pointer_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) 1: pointer_plus_expr(->pointer_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) 0: addr_expr(->pointer_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) 0: var_decl(->array_type->pointer_type{__vtbl_ptr_type}->function_type->integer_type{int}) : _ZTV9Exception 1: integer_cst : 16 : 1 0: try_finally(->void_type{void})[42] 0: statement_list(->void_type{void}) 1: modify_expr(->void_type{void}) 0: indirect_ref(->record_type) 0: nop_expr(->reference_type->record_type) 0: parm_decl(->pointer_type->record_type{Exception}) : this 1: constructor(->record_type) 2: block 0: label_expr(->void_type{void})[42] 0: label_decl(->void_type{void}) : <unnamed>
What is the reason for this? There should no Exception be thrown, so why handle it with a try_finally-Expression? I'm currently using GCC-8.2.0. I would be realy glad if you could answer me this question. And if you can give me some examples, where the try_finally-expression is also used, it would be realy helpfull. Thank you and kind regards, Philipp Rimmele