(layout_decl): Turn off DECL_BIT_FIELD for BLKmode that's properly
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 26 Apr 1996 10:38:48 +0000 (06:38 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 26 Apr 1996 10:38:48 +0000 (06:38 -0400)
aligned and a multiple of a byte.

From-SVN: r11892

gcc/stor-layout.c

index e7510fe..78d53c0 100644 (file)
@@ -278,6 +278,14 @@ layout_decl (decl, known_align)
        }
     }
 
+  /* Turn off DECL_BIT_FIELD if we won't need it set.  */
+  if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode
+      && known_align % TYPE_ALIGN (type) == 0
+      && DECL_SIZE (decl) != 0
+      && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
+         || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0))
+    DECL_BIT_FIELD (decl) = 0;
+
   /* Evaluate nonconstant size only once, either now or as soon as safe.  */
   if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
     DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));