1 /* { dg-require-effective-target label_values } */ 2 3 /* As a quality of implementation issue, we should not prevent inlining 4 of function explicitly marked inline just because a label therein had 5 its address taken. */ 6 7 static void *ptr1, *ptr2; 8 static int i = 1; 9 doit(void ** pptr,int cond)10static __inline__ void doit(void **pptr, int cond) 11 { 12 if (cond) { 13 here: 14 *pptr = &&here; 15 } 16 } 17 18 __attribute__ ((noinline)) f(int cond)19static void f(int cond) 20 { 21 doit (&ptr1, cond); 22 } 23 24 __attribute__ ((noinline)) g(int cond)25static void g(int cond) 26 { 27 doit (&ptr2, cond); 28 } 29 30 __attribute__ ((noinline)) 31 static void bar(void); 32 main()33int main() 34 { 35 f (i); 36 bar(); 37 g (i); 38 39 #ifdef __OPTIMIZE__ 40 if (ptr1 == ptr2) 41 abort (); 42 #endif 43 44 exit (0); 45 } 46 bar(void)47void bar(void) { } 48