cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.
authorJason Merrill <jason@redhat.com>
Wed, 4 Jun 2003 01:06:09 +0000 (21:06 -0400)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Wed, 4 Jun 2003 01:06:09 +0000 (01:06 +0000)
2003-06-03  Jason Merrill  <jason@redhat.com>

* cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.

* cp/decl.c (reshape_init): Handle vectors.

* testsuite/g++.dg/init/array10.C: New.

From-SVN: r67414

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c

index 158db739a84235b4bfd36531f9e67b186b4b2962..24e4f77f94ec794ca4647022d7acedf0c2b2df49 100644 (file)
@@ -1,3 +1,11 @@
+2003-06-03  Jason Merrill  <jason@redhat.com>
+
+        * cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.
+
+        * cp/decl.c (reshape_init): Handle vectors.
+
+        * testsuite/g++.dg/init/array10.C: New.
+
 2003-06-03  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        PR c++/10940
index 0fecbea9929c5231a6e494ea5f1bb5ef67f1f1fe..b72fb1787f3076c643705476b73b42a906720ac5 100644 (file)
@@ -2397,9 +2397,12 @@ struct lang_decl GTY(())
 
    An aggregate is an array or a class with no user-declared
    constructors, no private or protected non-static data members, no
-   base classes, and no virtual functions.  */
+   base classes, and no virtual functions.
+
+   As an extension, we also treat vectors as aggregates.  */
 #define CP_AGGREGATE_TYPE_P(TYPE)              \
   (TREE_CODE (TYPE) == ARRAY_TYPE              \
+   || TREE_CODE (TYPE) == VECTOR_TYPE          \
    || (CLASS_TYPE_P (TYPE)                     \
        && !CLASSTYPE_NON_AGGREGATE (TYPE)))
 
index 4355df5b6bed638783a51b084911f3424665f2ce..705f5a07cd9950d36c9e177518dc5d3b7b693e1a 100644 (file)
@@ -7438,7 +7438,8 @@ reshape_init (tree type, tree *initp)
   /* If the initializer is brace-enclosed, pull initializers from the
      enclosed elements.  Advance past the brace-enclosed initializer
      now.  */
-  if (TREE_CODE (old_init_value) == CONSTRUCTOR 
+  if (TREE_CODE (old_init_value) == CONSTRUCTOR
+      && TREE_TYPE (old_init_value) == NULL_TREE
       && TREE_HAS_CONSTRUCTOR (old_init_value))
     {
       *initp = TREE_CHAIN (old_init);
@@ -7483,8 +7484,7 @@ reshape_init (tree type, tree *initp)
      non-empty subaggregate, brace elision is assumed and the
      initializer is considered for the initialization of the first
      member of the subaggregate.  */
-  if (CLASS_TYPE_P (type) 
-      && !brace_enclosed_p
+  if (!brace_enclosed_p
       && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
     {
       *initp = TREE_CHAIN (old_init);