/* Test STT_GNU_IFUNC symbols with dynamic function pointer only.  */

#include <stdlib.h>

extern int foo (void);
extern int foo_protected (void);

typedef int (*foo_p) (void);

extern foo_p __attribute__ ((noinline)) get_foo (void);
extern foo_p __attribute__ ((noinline)) get_foo_protected (void);

foo_p
__attribute__ ((noinline))
get_foo (void)
{
  return foo;
}

foo_p
__attribute__ ((noinline))
get_foo_protected (void)
{
  return foo_protected;
}

int
main (void)
{
  foo_p p;

  p = get_foo ();
  if ((*p) () != -1)
    abort ();

  p = get_foo_protected ();
  if ((*p) () != 0)
    abort ();

  return 0;
}
