/* { dg-options "-fno-inline" } */ /* Check that stack alignment is not affected by variables not placed on the stack. */ #include #define ALIGNMENT 64 unsigned test(unsigned n, unsigned p) { static struct { char __attribute__((__aligned__(ALIGNMENT))) c; } s; unsigned x; assert(__alignof__(s) == ALIGNMENT); asm ("" : "=g" (x), "+m" (s) : "0" (&x)); return n ? test(n - 1, x) : (x ^ p); } unsigned test2(unsigned n, unsigned p) { static struct { char c; } s; unsigned x; assert(__alignof__(s) != ALIGNMENT); asm ("" : "=g" (x), "+m" (s) : "0" (&x)); return n ? test2(n - 1, x) : (x ^ p); } int main (int argc, char *argv[] __attribute__((unused))) { unsigned int x, y; x = test(argc, 0); x |= test(argc + 1, 0); x |= test(argc + 2, 0); y = test2(argc, 0); y |= test2(argc + 1, 0); y |= test2(argc + 2, 0); return (x & (ALIGNMENT - 1)) == 0 && (y & (ALIGNMENT - 1)) != 0 ? 1 : 0; }