decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
authorZack Weinberg <zack@codesourcery.com>
Sat, 1 May 2004 19:12:46 +0000 (19:12 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Sat, 1 May 2004 19:12:46 +0000 (19:12 +0000)
* decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
Instead, dig into the representation type to find the array bound.

From-SVN: r81393

gcc/cp/ChangeLog
gcc/cp/decl.c

index 0f0a5e2cf7fb55383a93cc9a4d07ba6f300aee33..bc900beae1def7613560761c8c8f3067f8e5100b 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-01  Zack Weinberg  <zack@codesourcery.com>
+
+       * decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
+       Instead, dig into the representation type to find the array bound.
+
 2004-04-30  Jason Merrill  <jason@redhat.com>
 
        Refer to base members using COMPONENT_REFs where possible.
@@ -23,7 +28,7 @@
 
        * init.c (build_aggr_init): Fix accidental use of C99 construct in
        previous change.
-       
+
        * class.c (initialize_array): Don't set TREE_HAS_CONSTRUCTOR on
        braced initializer.
        * cp-tree.h (BRACE_ENCLOSED_INITIALIZER_P): New macro.
@@ -42,7 +47,7 @@
        (class_initializer): Likewise.
        (get_pseudo_ti_init): Likewise.
        * typeck2.c (digest_init): Use BRACE_ENCLOSED_INITIALIZER_P.
-       
+
 2004-04-22  Alan Modra  <amodra@bigpond.net.au>
 
        * name-lookup.c (anonymous_namespace_name): Make static.
index f589868e14234ddbea73078392f73ce74aea33a6..1b788310ca3d00171824c921ede130847efa71dd 100644 (file)
@@ -4289,8 +4289,22 @@ reshape_init (tree type, tree *initp)
 
          /* If the bound of the array is known, take no more initializers
             than are allowed.  */
-         max_index = ((TYPE_DOMAIN (type) && (TREE_CODE (type) == ARRAY_TYPE))
-                      ? array_type_nelts (type) : NULL_TREE);
+         max_index = NULL_TREE;
+         if (TREE_CODE (type) == ARRAY_TYPE)
+           {
+             if (TYPE_DOMAIN (type))
+               max_index = array_type_nelts (type);
+           }
+         else
+           {
+             /* For a vector, the representation type is a struct
+                containing a single member which is an array of the
+                appropriate size.  */
+             tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
+             if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
+               max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
+           }
+
          /* Loop through the array elements, gathering initializers.  */
          for (index = size_zero_node;
               *initp && (!max_index || !tree_int_cst_lt (max_index, index));