re PR c/63495 (struct __attribute__ ((aligned (8))) broken on x86)
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. * gcc.target/i386/pr63495.c: New test. From-SVN: r216101
This commit is contained in:
parent
878f5596b3
commit
1740f8a1cd
4 changed files with 27 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
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
|
||||
|
|
|
@ -2400,17 +2400,19 @@ min_align_of_type (tree type)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
6
gcc/testsuite/gcc.target/i386/pr63495.c
Normal file
6
gcc/testsuite/gcc.target/i386/pr63495.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
/* 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");
|
Loading…
Add table
Reference in a new issue