#if defined(__alpha__)
#elif defined(__arc__)
# define PIC_REG "26"
#elif defined(__arm__)
# define PIC_REG "9"
#elif defined(AVR)
#elif defined(__cris__)
# define PIC_REG "0"
#elif defined(__fr30__)
#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__)
#elif defined(_IBMR2)
#elif defined(__i386__)
# define PIC_REG "ebx"
#elif defined(__ia64__)
#elif defined(__M32R__)
#elif defined(__m68k__)
# define PIC_REG "a5"
#elif defined(__mc68hc1x__)
#elif defined(__mcore__)
#elif defined(__mips__)
#elif defined(__MMIX__)
#elif defined(__mn10300__)
#elif #cpu(ns32k)
#elif defined(__hppa__)
#elif defined(__pdp11__)
#elif defined(__powerpc__) || defined(__PPC__) || defined(__POWERPC__)
# ifdef __MACH__
# define PIC_REG "31"
# else
# define PIC_REG "30"
# endif
#elif defined(__s390__)
# define PIC_REG "12"
#elif defined(__sparc__)
# define PIC_REG "l7"
#elif defined(__v850)
#elif defined(__vax__)
#elif defined(__xstormy16__)
#elif defined(__XTENSA__)
#elif defined(__sh__)
# define PIC_REG "r12"
#elif defined(__x86_64__)
#else
# error "Modify the test for your target."
#endif
#if defined PIC_REG && !defined __PIC__ && !defined __pic__
register void *reg __asm__(PIC_REG);
#else
static void *reg;
#endif
void * __attribute__((noinline))
dummy (void *x)
{
return x;
}
void
f (void)
{
goto *dummy (&&bar);
for (;;)
{
foo:
reg = (void *) 1;
if (!reg)
goto baz;
reg = &&foo;
}
bar:
baz:
reg = 0;
}
int
main()
{
void *old_reg = reg;
reg = (void *) 1;
f ();
#if !defined (__sparc__) && !(defined(__MACH__) && defined(__POWERPC__))
if (reg)
abort ();
#endif
reg = old_reg;
return 0;
}