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 foo(void)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