1 /* PR c/90737 - inconsistent address of a local converted to intptr_t 2 between callee and caller 3 { dg-do compile } 4 { dg-options "-O1 -Wall -Wreturn-local-addr -fdump-tree-optimized" } */ 5 6 typedef __INTPTR_TYPE__ intptr_t; 7 8 const intptr_t& return_addr_label_as_intref(void)9return_addr_label_as_intref (void) 10 { 11 label: 12 if ((const intptr_t*)&&label == 0) 13 __builtin_exit (1); 14 15 return *(const intptr_t*)&&label; // { dg-warning "\\\[-Wreturn-local-addr]" } */ 16 } 17 18 const intptr_t& return_addr_local_as_intref(void)19return_addr_local_as_intref (void) 20 { 21 int a[1]; 22 if ((const intptr_t*)a == 0) 23 __builtin_exit (1); 24 25 return (const intptr_t&)a; // { dg-warning "\\\[-Wreturn-local-addr]" } */ 26 } 27 28 /* Verify that the return value has been replaced with zero: 29 { dg-final { scan-tree-dump-times "return 0;" 2 "optimized" } } */ 30