From a72095c4a4acc6e3f083515d5817f57d0cccc82f Mon Sep 17 00:00:00 2001 From: amodra Date: Sun, 14 Feb 2016 01:43:14 +0000 Subject: [PATCH] Correct c-torture stkalign test The test wrongly assumed that a local var will normally not be 64-bit aligned, causing it to fail on many targets. So the test needs to pass if a local var *is* normally 64-bit aligned. * gcc.c-torture/execute/stkalign.c: Revise test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233407 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/execute/stkalign.c | 23 ++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1c417e5..031daed 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-02-14 Alan Modra + + * gcc.c-torture/execute/stkalign.c: Revise test. + 2016-02-13 Oleg Endo PR target/67260 diff --git a/gcc/testsuite/gcc.c-torture/execute/stkalign.c b/gcc/testsuite/gcc.c-torture/execute/stkalign.c index 2f8d041..e10a1d2 100644 --- a/gcc/testsuite/gcc.c-torture/execute/stkalign.c +++ b/gcc/testsuite/gcc.c-torture/execute/stkalign.c @@ -1,5 +1,6 @@ -/* { 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 @@ -16,12 +17,28 @@ unsigned test(unsigned n, unsigned p) 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; } -- 2.7.4