re PR target/50009 (Segmentation fault in tree_nop_conversion)
authorJakub Jelinek <jakub@redhat.com>
Thu, 18 Aug 2011 14:29:10 +0000 (16:29 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 18 Aug 2011 14:29:10 +0000 (16:29 +0200)
PR target/50009
* stor-layout.c (update_alignment_for_field): Don't ICE on
packed flexible array members if ms_bitfield_layout_p.

* gcc.c-torture/compile/pr50009.c: New test.

From-SVN: r177860

gcc/ChangeLog
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr50009.c [new file with mode: 0644]

index 1b5bc6c1b9c42c0ecab2dfe9b4d9735bee703690..0c3c5af5c3e929801d335584f36205e6742be2c8 100644 (file)
@@ -1,5 +1,9 @@
 2011-08-18  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/50009
+       * stor-layout.c (update_alignment_for_field): Don't ICE on
+       packed flexible array members if ms_bitfield_layout_p.
+
        PR target/50092
        * config/i386/i386.c (assign_386_stack_local): Call validize_mem
        on the result before returning it.
index e488741f5a089e174401fbde750b33c0e6e158b6..f15da0ce30f95dc5bf7c01446ca627ecd4de9a07 100644 (file)
@@ -1,7 +1,7 @@
 /* C-compiler utilities for types and variables storage layout
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-   Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+   2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -935,7 +935,8 @@ update_alignment_for_field (record_layout_info rli, tree field,
         applies if there was an immediately prior, nonzero-size
         bitfield.  (That's the way it is, experimentally.) */
       if ((!is_bitfield && !DECL_PACKED (field))
-         || (!integer_zerop (DECL_SIZE (field))
+         || ((DECL_SIZE (field) == NULL_TREE
+              || !integer_zerop (DECL_SIZE (field)))
              ? !DECL_PACKED (field)
              : (rli->prev_field
                 && DECL_BIT_FIELD_TYPE (rli->prev_field)
index 76e855480d4ca216c9bab9b2551d4345e4d00fc4..99345f32dc380da7e55e55a155df4af646199fe1 100644 (file)
@@ -1,5 +1,8 @@
 2011-08-18  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/50009
+       * gcc.c-torture/compile/pr50009.c: New test.
+
        PR target/50092
        * gcc.dg/torture/pr50092.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr50009.c b/gcc/testsuite/gcc.c-torture/compile/pr50009.c
new file mode 100644 (file)
index 0000000..ade170c
--- /dev/null
@@ -0,0 +1,6 @@
+/* PR target/50009 */
+
+struct S {
+  short a;
+  short b[];
+} __attribute__((packed));