1/* { dg-do compile } */ 2/* { dg-options "-fstack-usage" } */ 3 4/* This is aimed at testing basic support for -fstack-usage in the back-ends. 5 See the SPARC back-end for example (grep flag_stack_usage_info in sparc.c). 6 Once it is implemented, adjust SIZE below so that the stack usage for the 7 function FOO is reported as 256 or 264 in the stack usage (.su) file. 8 Then check that this is the actual stack usage in the assembly file. */ 9 10#if defined(__aarch64__) 11# define SIZE 256 /* No frame pointer for leaf functions (default) */ 12#elif defined(__arc__) 13# define SIZE (256-4) 14#elif defined(__i386__) 15# define SIZE 248 16#elif defined(__x86_64__) 17# ifndef _WIN64 18# define SIZE 356 19# else 20# define SIZE (256 - 24) 21# endif 22#elif defined (__sparc__) 23# if defined (__arch64__) 24# define SIZE 76 25# else 26# define SIZE 160 27# endif 28#elif defined(__hppa__) 29# define SIZE 192 30#elif defined (__alpha__) 31# define SIZE 240 32#elif defined (__ia64__) 33# define SIZE 272 34#elif defined(__mips__) 35# if defined (__mips_abicalls) \ 36 || (defined _MIPS_SIM && (_MIPS_SIM ==_ABIN32 || _MIPS_SIM==_ABI64)) 37# define SIZE 240 38# else 39# define SIZE 248 40# endif 41#elif defined (__nds32__) 42# define SIZE 248 /* 256 - 8 bytes, only $fp and padding bytes are saved in 43 the register save area under O0 optimization level. */ 44#elif defined (__powerpc64__) || defined (__ppc64__) || defined (__POWERPC64__) \ 45 || defined (__PPC64__) 46# if _CALL_ELF == 2 47# define SIZE 208 48# else 49# define SIZE 180 50# endif 51#elif defined (__powerpc__) || defined (__PPC__) || defined (__ppc__) \ 52 || defined (__POWERPC__) || defined (PPC) || defined (_IBMR2) 53# if defined (__ALTIVEC__) 54# if defined (__APPLE__) 55# define SIZE 204 56# else 57# define SIZE 220 58# endif 59# elif defined (_AIX) 60# define SIZE 208 61# else 62# define SIZE 240 63# endif 64#elif defined (__AVR__) 65# define SIZE 254 66#elif defined (__s390x__) 67# define SIZE 96 /* 256 - 160 bytes for register save area */ 68#elif defined (__s390__) 69# define SIZE 160 /* 256 - 96 bytes for register save area */ 70#elif defined (__SPU__) 71# define SIZE 224 72#elif defined (__epiphany__) 73# define SIZE (256 - __EPIPHANY_STACK_OFFSET__) 74#elif defined (__RL78__) 75# define SIZE 254 76#elif defined (__sh__) 77# define SIZE 252 78#elif defined (__frv__) 79# define SIZE 248 80#elif defined (xstormy16) 81# define SIZE 254 82#elif defined (__nios2__) 83# define SIZE 252 84#else 85# define SIZE 256 86#endif 87 88int foo (void) 89{ 90 char arr[SIZE]; 91 arr[0] = 1; 92 return 0; 93} 94 95/* { dg-final { scan-stack-usage "foo\t\(256|264\)\tstatic" } } */ 96/* { dg-final { cleanup-stack-usage } } */ 97