Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/split-7.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-do run } */ /* { dg-require-effective-target split_stack } */ /* { dg-options "-fsplit-stack -O2" } */ /* { dg-options "-fsplit-stack -O2 -mno-accumulate-outgoing-args" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ /* A case that used to fail on 32-bit x86 when optimizing and not using -maccumulate-args. The stack adjustment of the alloca got mixed up with the arguments pushed on the stack to the function before the call of alloca. */ #include <stdlib.h> typedef struct { const char* s; int l; } s; typedef unsigned long long align16 __attribute__ ((aligned(16))); s gobats (const void *, int) __attribute__ ((noinline)); s gobats (const void* p __attribute__ ((unused)), int l __attribute__ ((unused))) { s v; v.s = 0; v.l = 0; return v; } void check_aligned (void *p) __attribute__ ((noinline)); void check_aligned (void *p) { if (((__SIZE_TYPE__) p & 0xf) != 0) abort (); } void gap (void *) __attribute__ ((noinline)); void gap (void *p) { align16 a; check_aligned (&a); } int main (int argc, char **argv) { s *space; gobats(0, 16); space = (s *) alloca(sizeof(s) + 1); *space = (s){0, 16}; gap(space); return 0; }