summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-07 17:51:16 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-07 17:51:16 +0000
commit18aeca2550226b6e869545bf8e10fb68f3a2a55d (patch)
tree0a913208222d0d411ef29b8b2eb99725d0b35cf2
parent2219274c3d2e38da421511bb8d95bcea06fb8f9b (diff)
downloadgcc-18aeca2550226b6e869545bf8e10fb68f3a2a55d.tar.gz
* decl.c (cp_finish_decl): Only make_tree_vector if we're calling
check_initializer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181099 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 201c2c10cfb..66b4e5194f9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index d2daf918956..3b283d83d26 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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)