+2006-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27270
+ * decl.c (reshape_init_class): Move check for designated
+ to ...
+ * parser.c (cp_parser_initializer_list): ... here.
+ * pt.c (tsubst_copy_and_build): Use finish_compound_literal.
+
2006-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/27270
/* Handle designated initializers, as an extension. */
if (d->cur->index)
{
- if (pedantic)
- pedwarn ("ISO C++ does not allow designated initializers");
-
field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
if (!field || TREE_CODE (field) != FIELD_DECL)
&& cp_lexer_next_token_is (parser->lexer, CPP_NAME)
&& cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
{
+ /* Warn the user that they are using an extension. */
+ if (pedantic)
+ pedwarn ("ISO C++ does not allow designated initializers");
/* Consume the identifier. */
identifier = cp_lexer_consume_token (parser->lexer)->value;
/* Consume the `:'. */
VEC(constructor_elt,gc) *n;
constructor_elt *ce;
unsigned HOST_WIDE_INT idx;
- tree r;
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
bool process_index_p;
ce->value = RECUR (ce->value);
}
- r = build_constructor (NULL_TREE, n);
- TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
+ if (TREE_HAS_CONSTRUCTOR (t))
+ return finish_compound_literal (type, n);
- if (type)
- {
- r = reshape_init (type, r);
- return digest_init (type, r);
- }
- return r;
+ return build_constructor (NULL_TREE, n);
}
case TYPEID_EXPR:
+2006-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27270
+ * g++.dg/ext/complit8.C: Tweak error markers.
+ * g++.dg/template/complit1.C: Add error marker.
+
2006-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/27270
struct Array {
Entry *array[32];
Array () :
- array ( (Entry*[1]) { 0, 0 } ) // { dg-error "initializers|conversion" }
+ array ( (Entry*[1]) { 0, 0 } ) // { dg-error "initializers|incompatible" }
{}
};
};
template<int D>
-C<D>::C() : d((int[]){1,2,3}) {}
+C<D>::C() : d((int[]){1,2,3}) {} // { dg-error "array" }
template class C<1>;