re PR c++/48132 ([C++0x] Internal compiler error on array of std::complex with -std...
authorJason Merrill <jason@redhat.com>
Wed, 16 Mar 2011 20:04:06 +0000 (16:04 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 16 Mar 2011 20:04:06 +0000 (16:04 -0400)
PR c++/48132
* decl.c (check_array_designated_initializer): Allow integer index.
(reshape_init_array_1): Set index on the elements.

From-SVN: r171068

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C [new file with mode: 0644]

index 4649d965ddf4108ce756b5e30111bc1022ba5835..a1f8f049255f423a7b1711b389623f971af09697 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-16  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48132
+       * decl.c (check_array_designated_initializer): Allow integer index.
+       (reshape_init_array_1): Set index on the elements.
+
 2011-03-16  Jason Merrill  <jason@redhat.com>
 
        PR c++/48113
index f9d90ad32581354923a7ed836bfc1ae5f63fb277..3139ad89b563a6ddd2d6f0a20f9d6b1f194015af 100644 (file)
@@ -4596,6 +4596,9 @@ check_array_designated_initializer (const constructor_elt *ce)
       if (ce->index == error_mark_node)
        error ("name used in a GNU-style designated "
               "initializer for an array");
+      else if (TREE_CODE (ce->index) == INTEGER_CST)
+       /* An index added by reshape_init.  */
+       return true;
       else
        {
          gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
@@ -4899,7 +4902,8 @@ reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
       if (elt_init == error_mark_node)
        return error_mark_node;
-      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
+      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
+                             size_int (index), elt_init);
     }
 
   return new_init;
index dee4a8d4aa0ae57b650cfe404a7e95757a676dee..f5e7580c39d80256d8ef8887d7102e8f26654cad 100644 (file)
@@ -1,3 +1,7 @@
+2011-03-16  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/cpp0x/constexpr-array3.C: New.
+
 2011-03-16  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/cpp0x/sfinae6.C: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
new file mode 100644 (file)
index 0000000..145a430
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/48132
+// { dg-options -std=c++0x }
+
+struct C
+{
+  constexpr C (int x) : c (x) {}
+  int c;
+};
+
+void
+foo ()
+{
+  C a[] = { C (0) };
+}