* decl.c (cp_finish_decl): Only make_tree_vector if we're calling
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Nov 2011 17:51:16 +0000 (17:51 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Nov 2011 17:51:16 +0000 (17:51 +0000)
check_initializer.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181099 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c

index 201c2c1..66b4e51 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-07  Jason Merrill  <jason@redhat.com>
+
+       * decl.c (cp_finish_decl): Only make_tree_vector if we're calling
+       check_initializer.
+
 2011-11-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/35688
index d2daf91..3b283d8 100644 (file)
@@ -6049,9 +6049,12 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
          /* This variable seems to be a non-dependent constant, so process
             its initializer.  If check_initializer returns non-null the
             initialization wasn't constant after all.  */
-         tree init_code = check_initializer (decl, init, flags, &cleanups);
+         tree init_code;
+         cleanups = make_tree_vector ();
+         init_code = check_initializer (decl, init, flags, &cleanups);
          if (init_code == NULL_TREE)
            init = NULL_TREE;
+         release_tree_vector (cleanups);
        }
       else if (!DECL_PRETTY_FUNCTION_P (decl))
        /* Deduce array size even if the initializer is dependent.  */
@@ -6150,6 +6153,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
                error ("Java object %qD not allocated with %<new%>", decl);
              init = NULL_TREE;
            }
+         cleanups = make_tree_vector ();
          init = check_initializer (decl, init, flags, &cleanups);
          /* Thread-local storage cannot be dynamically initialized.  */
          if (DECL_THREAD_LOCAL_P (decl) && init)
@@ -6320,6 +6324,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
       unsigned i; tree t;
       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
        push_cleanup (decl, t, false);
+      release_tree_vector (cleanups);
     }
 
   if (was_readonly)