diff options
| -rw-r--r-- | gcc/cp/except.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 87e9586..d82c07f 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -724,7 +724,11 @@ build_throw (tree exp) temp_expr = NULL_TREE; stabilize_init (exp, &temp_expr); + /* Wrap the initialization in a CLEANUP_POINT_EXPR so that cleanups + for temporaries within the initialization are run before the one + for the exception object, preserving LIFO order. */ exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp); + if (elided) exp = build2 (TRY_CATCH_EXPR, void_type_node, exp, do_free_exception (ptr)); |
