ifunc-main.c 541 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <stdio.h>
  2. extern int foo(void);
  3. extern int bar(void);
  4. typedef int (*func_p) (void);
  5. func_p foo_ptr = foo;
  6. func_p
  7. __attribute__((noinline))
  8. get_bar (void)
  9. {
  10. return bar;
  11. }
  12. int
  13. main (void)
  14. {
  15. func_p bar_ptr = get_bar ();
  16. if (bar_ptr != bar)
  17. __builtin_abort ();
  18. if (bar_ptr() != -1)
  19. __builtin_abort ();
  20. if (bar() != -1)
  21. __builtin_abort ();
  22. if (foo_ptr != foo)
  23. __builtin_abort ();
  24. if (foo_ptr() != 1)
  25. __builtin_abort ();
  26. if (foo() != 1)
  27. __builtin_abort ();
  28. printf ("OK\n");
  29. return 0;
  30. }