diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1999-05-16 20:48:42 +0000 |
---|---|---|
committer | Jason Merrill <jason@yorick.cygnus.com> | 1999-05-16 20:48:42 +0000 |
commit | 76a685e80c79ebe3b5e4fee8ea49a6e0a87e4415 (patch) | |
tree | 420260da87c3e2c4a7facca3d40125ceceec9547 | |
parent | 70bbed6775afbad4598c2401e22c5f4b8b43d60d (diff) |
* init.c (build_new_1): suspend_momentary while calculating size.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@26953 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/cp/init.c | 13 |
2 files changed, 13 insertions, 12 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f0429a1411e..98d7d05b4c8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 1999-05-16 Jason Merrill <jason@yorick.cygnus.com> + * parse.y (direct_new_declarator): Make the first one a + nonmomentary_expr, too. + * init.c (build_new): suspend_momentary while we're calculating + the size. + (build_new_1): Likewise. Don't copy size. + * decl2.c (finish_objects): Don't use .?tors.* if we don't have ASM_OUTPUT_CONSTRUCTOR. @@ -10,12 +16,6 @@ (grokdeclarator): Adjust. * cp-tree.h: Adjust. - * parse.y (direct_new_declarator): Make the first one a - nonmomentary_expr, too. - * init.c (build_new): suspend_momentary while we're calculating - the size. - (build_new_1): Don't copy size. - 1999-05-16 Mark Mitchell <mark@codesourcery.com> * cp-tree.h (permanent_p): New function. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index aab25c3bf26..7ca00053861 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2134,6 +2134,7 @@ build_new_1 (exp) int use_cookie, nothrow, check_new; int use_global_new; int use_java_new = 0; + int susp = 0; placement = TREE_OPERAND (exp, 0); type = TREE_OPERAND (exp, 1); @@ -2163,11 +2164,13 @@ build_new_1 (exp) if (!complete_type_or_else (true_type, exp)) return error_mark_node; + susp = suspend_momentary (); if (has_array) size = fold (build_binary_op (MULT_EXPR, size_in_bytes (true_type), nelts)); else size = size_in_bytes (type); + resume_momentary (susp); if (TREE_CODE (true_type) == VOID_TYPE) { @@ -2250,8 +2253,6 @@ build_new_1 (exp) } else { - int susp = 0; - if (flag_exceptions) /* We will use RVAL when generating an exception handler for this new-expression, so we must save it. */ @@ -2424,7 +2425,7 @@ build_new_1 (exp) int flags = LOOKUP_NORMAL | (use_global_new * LOOKUP_GLOBAL); /* All cleanups must last longer than normal. */ - int yes = suspend_momentary (); + susp = suspend_momentary (); if (placement) { @@ -2438,7 +2439,7 @@ build_new_1 (exp) cleanup = build_op_delete_call (dcode, alloc_node, size, flags, fn); - resume_momentary (yes); + resume_momentary (susp); /* Ack! First we allocate the memory. Then we set our sentry variable to true, and expand a cleanup that deletes the memory @@ -2452,11 +2453,11 @@ build_new_1 (exp) begin = get_target_expr (boolean_true_node); sentry = TREE_OPERAND (begin, 0); - yes = suspend_momentary (); + susp = suspend_momentary (); TREE_OPERAND (begin, 2) = build (COND_EXPR, void_type_node, sentry, cleanup, void_zero_node); - resume_momentary (yes); + resume_momentary (susp); rval = get_target_expr (rval); |