Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.c-torture/execute/stkalign.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-options "-fno-inline" } */ /* Check that stack alignment is not affected by variables not placed on the stack. */ #include <assert.h> #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; }