+2014-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/63495
+ * stor-layout.c (min_align_of_type): Don't decrease alignment
+ through BIGGEST_FIELD_ALIGNMENT or ADJUST_FIELD_ALIGN if
+ TYPE_USER_ALIGN is set.
+
2014-10-10 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/63483
{
unsigned int align = TYPE_ALIGN (type);
align = MIN (align, BIGGEST_ALIGNMENT);
+ if (!TYPE_USER_ALIGN (type))
+ {
#ifdef BIGGEST_FIELD_ALIGNMENT
- align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
+ align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
#endif
- unsigned int field_align = align;
+ unsigned int field_align = align;
#ifdef ADJUST_FIELD_ALIGN
- tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
- type);
- field_align = ADJUST_FIELD_ALIGN (field, field_align);
- ggc_free (field);
+ tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE, type);
+ field_align = ADJUST_FIELD_ALIGN (field, field_align);
+ ggc_free (field);
#endif
- align = MIN (align, field_align);
+ align = MIN (align, field_align);
+ }
return align / BITS_PER_UNIT;
}
+2014-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/63495
+ * gcc.target/i386/pr63495.c: New test.
+
2014-10-10 Marek Polacek <polacek@redhat.com>
* c-c++-common/ubsan/object-size-1.c: New test.
--- /dev/null
+/* PR c/63495 */
+/* { dg-do compile { target { i?86-*-linux* x86_64-*-linux* } } } */
+/* { dg-options "-std=gnu11" } */
+
+struct __attribute__ ((aligned (8))) S { char c; };
+_Static_assert (_Alignof (struct S) >= 8, "wrong alignment");