1 /* A simple check to see whether indirect calls are
2    being sibcall optimized on targets that do support
3    this notion, i.e. have the according call patterns
4    in place.
5 
6    Copyright (C) 2002 Free Software Foundation Inc.
7    Contributed by Andreas Bauer <baueran@in.tum.de>  */
8 
9 /* { dg-do run { target epiphany-*-* i?86-*-* x86_64-*-* s390*-*-* } } */
10 /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && { ia32 && { ! nonpic } } } } */
11 /* { dg-options "-O2 -foptimize-sibling-calls -fno-ipa-cp" } */
12 
13 extern void abort (void);
14 extern void exit (int);
15 
16 int foo (int);
17 int bar (int);
18 
19 int (*ptr) (int);
20 int *f_addr;
21 
22 int
main()23 main ()
24 {
25   ptr = bar;
26   foo (7);
27   exit (0);
28 }
29 
30 int __attribute__ ((noinline))
bar(b)31 bar (b)
32      int b;
33 {
34   if (f_addr == (int*) __builtin_return_address (0))
35     return b;
36   else
37     abort ();
38 }
39 
40 int __attribute__ ((noinline))
foo(f)41 foo (f)
42      int f;
43 {
44   f_addr = (int*) __builtin_return_address (0);
45   return (*ptr)(f);
46 }
47