static enum gimplify_status gimplify_must_not_throw_expr (tree *expr_p, gimple_seq *pre_p) { tree stmt = *expr_p; tree temp = voidify_wrapper_expr (stmt, NULL); tree body = TREE_OPERAND (stmt, 0); gimple_seq try_ = NULL; gimple_seq catch_ = NULL; gimple mnt; gimplify_and_add (body, &try_); mnt = gimple_build_eh_must_not_throw (terminate_node); gimple_seq_add_stmt_without_update (&catch_, mnt); mnt = gimple_build_try (try_, catch_, GIMPLE_TRY_CATCH); gimple_seq_add_stmt_without_update (pre_p, mnt); if (temp) { *expr_p = temp; return GS_OK; } *expr_p = NULL; return GS_ALL_DONE; }
static void gimplify_must_not_throw_expr (tree *expr_p, tree *pre_p) { tree stmt = *expr_p; tree temp = voidify_wrapper_expr (stmt, NULL); tree body = TREE_OPERAND (stmt, 0); gimplify_stmt (&body); stmt = gimple_build_eh_filter (body, NULL_TREE, build_call (terminate_node, NULL_TREE)); if (temp) { append_to_statement_list (stmt, pre_p); *expr_p = temp; } else *expr_p = stmt; }
static enum gimplify_status gimplify_must_not_throw_expr (tree *expr_p, gimple_seq *pre_p) { tree stmt = *expr_p; tree temp = voidify_wrapper_expr (stmt, NULL); tree body = TREE_OPERAND (stmt, 0); stmt = build_gimple_eh_filter_tree (body, NULL_TREE, build_call_n (terminate_node, 0)); gimplify_and_add (stmt, pre_p); if (temp) { *expr_p = temp; return GS_OK; } *expr_p = NULL; return GS_ALL_DONE; }