* cp-tree.h: Declare it.
* call.c (build_aggr_conv): Fail if there are more initializers
than initializable fields.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157927
138bc75d-0d04-0410-961f-
82ee72b054a4
2010-04-01 Jason Merrill <jason@redhat.com>
+ * decl.c (next_initializable_field): No longer static.
+ * cp-tree.h: Declare it.
+ * call.c (build_aggr_conv): Fail if there are more initializers
+ than initializable fields.
+
* semantics.c (maybe_add_lambda_conv_op): Use null_pointer_node
instead of void_zero_node.
{
unsigned HOST_WIDE_INT i = 0;
conversion *c;
- tree field = TYPE_FIELDS (type);
+ tree field = next_initializable_field (TYPE_FIELDS (type));
- for (; field; field = TREE_CHAIN (field), ++i)
+ for (; field; field = next_initializable_field (TREE_CHAIN (field)))
{
- if (TREE_CODE (field) != FIELD_DECL)
- continue;
if (i < CONSTRUCTOR_NELTS (ctor))
{
constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
if (!can_convert_arg (TREE_TYPE (field), TREE_TYPE (ce->value),
ce->value, flags))
return NULL;
+ ++i;
+ if (TREE_CODE (type) == UNION_TYPE)
+ break;
}
else if (build_value_init (TREE_TYPE (field)) == error_mark_node)
return NULL;
}
+ if (i < CONSTRUCTOR_NELTS (ctor))
+ return NULL;
+
c = alloc_conversion (ck_aggr);
c->type = type;
c->rank = cr_exact;
extern void initialize_artificial_var (tree, tree);
extern tree check_var_type (tree, tree);
extern tree reshape_init (tree, tree);
+extern tree next_initializable_field (tree);
extern bool defer_mark_used_calls;
extern GTY(()) VEC(tree, gc) *deferred_mark_used_calls;
+2010-04-01 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/cpp0x/initlist12.C: Adjust expected errors.
+
2010-04-01 Janne Blomqvist <jb@gcc.gnu.org>
Manfred Schwarb <manfred99@gmx.ch>