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