-/* { dg-xfail-run-if "invalid assumption" { sparc*-*-* && lp64 } "*" "" } */
/* { dg-options "-fno-inline" } */
+/* Check that stack alignment is not affected by variables not placed
+ on the stack. */
#include <assert.h>
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 = test(argc, 0);
+ unsigned int x, y;
+ x = test(argc, 0);
x |= test(argc + 1, 0);
x |= test(argc + 2, 0);
- return !(x & (ALIGNMENT - 1));
+ 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;
}