aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1999-05-16 20:48:42 +0000
committerJason Merrill <jason@yorick.cygnus.com>1999-05-16 20:48:42 +0000
commit76a685e80c79ebe3b5e4fee8ea49a6e0a87e4415 (patch)
tree420260da87c3e2c4a7facca3d40125ceceec9547
parent70bbed6775afbad4598c2401e22c5f4b8b43d60d (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/ChangeLog12
-rw-r--r--gcc/cp/init.c13
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);