OSDN Git Service

PR c++/27270
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Oct 2006 22:25:35 +0000 (22:25 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Oct 2006 22:25:35 +0000 (22:25 +0000)
* 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.
PR c++/27270
* g++.dg/ext/complit8.C: Tweak error markers.
* g++.dg/template/complit1.C: Add error marker.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/complit8.C
gcc/testsuite/g++.dg/template/complit1.C

index e603fd5..4728586 100644 (file)
@@ -1,3 +1,11 @@
+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
index e814c0a..11bb648 100644 (file)
@@ -4485,9 +4485,6 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
       /* 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)
index 1ffc9ee..dfcbe73 100644 (file)
@@ -12736,6 +12736,9 @@ cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
          && 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 `:'.  */
index ce5a809..9a46264 100644 (file)
@@ -9323,7 +9323,6 @@ tsubst_copy_and_build (tree t,
        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;
 
@@ -9347,15 +9346,10 @@ tsubst_copy_and_build (tree t,
            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:
index 603cbed..4fed928 100644 (file)
@@ -1,3 +1,9 @@
+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
index b778b4b..97ff563 100644 (file)
@@ -5,7 +5,7 @@ template<typename Entry>
 struct Array {
   Entry *array[32];
   Array () :
-    array ( (Entry*[1]) { 0, 0 } ) // { dg-error "initializers|conversion" }
+    array ( (Entry*[1]) { 0, 0 } ) // { dg-error "initializers|incompatible" }
   {}
 };
 
index 00eb23e..218a7c9 100644 (file)
@@ -6,6 +6,6 @@ template <int D> struct C {
 };
 
 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>;