re PR tree-optimization/43528 (ICE: in tree_low_cst, at tree.c:6198 with -mms-bitfiel...
authorUros Bizjak <ubizjak@gmail.com>
Sat, 27 Mar 2010 13:40:08 +0000 (14:40 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Sat, 27 Mar 2010 13:40:08 +0000 (14:40 +0100)
PR tree-optimization/43528
* stor-layout.c (place_field): Check that constant fits into
unsigned HWI when skipping calculation of MS bitfield layout.

testsuite/ChangeLog:

PR tree-optimization/43528
* gcc.target/i386/pr43528.c: New test.

From-SVN: r157776

gcc/ChangeLog
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr43528.c [new file with mode: 0644]

index d4f4488..393e753 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR tree-optimization/43528
+       * stor-layout.c (place_field): Check that constant fits into
+       unsigned HWI when skipping calculation of MS bitfield layout.
+
 2010-03-27  Jan Hubicka  <jh@suse.cz>
 
        PR middle-end/43391
index 1806c12..18c74cb 100644 (file)
@@ -1346,11 +1346,12 @@ place_field (record_layout_info rli, tree field)
             until we see a bitfield (and come by here again) we just skip
             calculating it.  */
          if (DECL_SIZE (field) != NULL
-             && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 0)
-             && host_integerp (DECL_SIZE (field), 0))
+             && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 1)
+             && host_integerp (DECL_SIZE (field), 1))
            {
-             HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
-             HOST_WIDE_INT typesize
+             unsigned HOST_WIDE_INT bitsize
+               = tree_low_cst (DECL_SIZE (field), 1);
+             unsigned HOST_WIDE_INT typesize
                = tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 1);
 
              if (typesize < bitsize)
index 01c513b..51cfa8b 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR tree-optimization/43528
+       * gcc.target/i386/pr43528.c: New test.
+
 2010-03-26  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/43381
diff --git a/gcc/testsuite/gcc.target/i386/pr43528.c b/gcc/testsuite/gcc.target/i386/pr43528.c
new file mode 100644 (file)
index 0000000..f33d96b
--- /dev/null
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-mms-bitfields" } */
+
+struct S { int i[(1LL << 60) - 1]; };