blob: 4ad9c01a974a474bc3656e2d8e2ba62c92d0299d [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fcf-protection" } */
/* { dg-require-ifunc "" } */
/* { dg-final { scan-assembler-times {\mendbr} 4 } } */
int resolver_fn = 0;
int resolved_fn = 0;
static inline void
do_it_right_at_runtime_A (void)
{
resolved_fn++;
}
static inline void
do_it_right_at_runtime_B (void)
{
resolved_fn++;
}
static inline void do_it_right_at_runtime (void);
void do_it_right_at_runtime (void)
__attribute__ ((ifunc ("resolve_do_it_right_at_runtime")));
extern int r;
static void (*resolve_do_it_right_at_runtime (void)) (void)
{
resolver_fn++;
typeof(do_it_right_at_runtime) *func;
if (r & 1)
func = do_it_right_at_runtime_A;
else
func = do_it_right_at_runtime_B;
return (void *) func;
}
int
main ()
{
do_it_right_at_runtime ();
return 0;
}