/* As a quality of implementation issue, we should not prevent inlining of function explicitly marked inline just because a label therein had its address taken. */ #ifndef NO_LABEL_VALUES static void *ptr1, *ptr2; static int i = 1; static __inline__ void doit(void **pptr, int cond) { if (cond) { here: *pptr = &&here; } } __attribute__ ((noinline)) static void f(int cond) { doit (&ptr1, cond); } __attribute__ ((noinline)) static void g(int cond) { doit (&ptr2, cond); } __attribute__ ((noinline)) static void bar(void); int main() { f (i); bar(); g (i); #ifdef __OPTIMIZE__ if (ptr1 == ptr2) abort (); #endif exit (0); } void bar(void) { } #else /* NO_LABEL_VALUES */ int main() { exit(0); } #endif