* stor-layout.c (layout_type, case ARRAY_TYPE): Give one-element array
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Apr 2002 12:00:30 +0000 (12:00 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Apr 2002 12:00:30 +0000 (12:00 +0000)
the same mode as its component.

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

gcc/ChangeLog
gcc/stor-layout.c

index 8fa21c4..3cb11a0 100644 (file)
@@ -1,3 +1,8 @@
+Tue Apr  2 06:47:40 2002  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * stor-layout.c (layout_type, case ARRAY_TYPE): Give one-element array
+       the same mode as its component.
+
 2002-04-02  Richard Henderson  <rth@redhat.com>
 
        PR opt/190
index 8295000..baf26dd 100644 (file)
@@ -1584,8 +1584,13 @@ layout_type (type)
            && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
                || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
          {
-           TYPE_MODE (type)
-             = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
+           /* One-element arrays get the component type's mode.  */
+           if (simple_cst_equal (TYPE_SIZE (type),
+                                 TYPE_SIZE (TREE_TYPE (type))))
+             TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
+           else
+             TYPE_MODE (type)
+               = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
 
            if (TYPE_MODE (type) != BLKmode
                && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT