]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* init.c (build_new_1): suspend_momentary while calculating size.
authorJason Merrill <jason@yorick.cygnus.com>
Sun, 16 May 1999 20:48:42 +0000 (20:48 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 16 May 1999 20:48:42 +0000 (16:48 -0400)
From-SVN: r26953

gcc/cp/ChangeLog
gcc/cp/init.c

index f0429a1411ef62c9f76151f27450a86381a22555..98d7d05b4c8b091fc24b20bd133a76771914e666 100644 (file)
@@ -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.
 
        (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.
index aab25c3bf267a9a169bdb43d6842b4ecdcc7da03..7ca00053861701a7615b19cc3df536f383a5ec78 100644 (file)
@@ -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);