OSDN Git Service

PR target/50009
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Aug 2011 14:29:10 +0000 (14:29 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Aug 2011 14:29:10 +0000 (14:29 +0000)
* 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.

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

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

index 1b5bc6c..0c3c5af 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 e488741..f15da0c 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 76e8554..99345f3 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));