aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-07-27 18:06:03 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-07-27 18:06:03 -0400
commit462aa169acee3e6dcfad17165aa7fc68ad417409 (patch)
tree006042e9b7977e67d56f3ee4b12aba0da516f847 /gcc/cp
parent418e920fc6c08a3f9b20a6996980c7380cbac67c (diff)
downloadgcc-462aa169acee3e6dcfad17165aa7fc68ad417409.zip
gcc-462aa169acee3e6dcfad17165aa7fc68ad417409.tar.gz
gcc-462aa169acee3e6dcfad17165aa7fc68ad417409.tar.bz2
pt.c (tsubst_expr): Handle getting an AGGR_INIT_EXPR from build_value_init.
* pt.c (tsubst_expr) [DECL_EXPR]: Handle getting an AGGR_INIT_EXPR from build_value_init. * init.c (build_value_init_noctor): Give error for unknown array bound. From-SVN: r162603
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/init.c5
-rw-r--r--gcc/cp/pt.c20
3 files changed, 23 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3541686..3625021 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2010-07-27 Jason Merrill <jason@redhat.com>
+
+ * pt.c (tsubst_expr) [DECL_EXPR]: Handle getting an AGGR_INIT_EXPR
+ from build_value_init.
+ * init.c (build_value_init_noctor): Give error for unknown array
+ bound.
+
2010-07-27 Joseph Myers <joseph@codesourcery.com>
* cp-objcp-common.h (LANG_HOOKS_MISSING_ARGUMENT): Remove.
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index d796fd0..0edb800 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -379,7 +379,10 @@ build_value_init_noctor (tree type)
/* If we have an error_mark here, we should just return error mark
as we don't know the size of the array yet. */
if (max_index == error_mark_node)
- return error_mark_node;
+ {
+ error ("cannot value-initialize array of unknown bound %qT", type);
+ return error_mark_node;
+ }
gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
/* A zero-sized array, which is accepted as an extension, will
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 7a33147..2777ab7 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -11697,14 +11697,18 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
tree t = RECUR (init);
if (init && !t)
- /* If we had an initializer but it
- instantiated to nothing,
- value-initialize the object. This will
- only occur when the initializer was a
- pack expansion where the parameter packs
- used in that expansion were of length
- zero. */
- init = build_value_init (TREE_TYPE (decl));
+ {
+ /* If we had an initializer but it
+ instantiated to nothing,
+ value-initialize the object. This will
+ only occur when the initializer was a
+ pack expansion where the parameter packs
+ used in that expansion were of length
+ zero. */
+ init = build_value_init (TREE_TYPE (decl));
+ if (TREE_CODE (init) == AGGR_INIT_EXPR)
+ init = get_target_expr (init);
+ }
else
init = t;
}