* gcc.c-torture/execute/alias-3.c: Skip on AIX.
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / eeprof-1.c
blob81dcefbab1200f427dc277dcff42efe7302d334e
1 /* { dg-require-effective-target return_address } */
2 /* { dg-options "-finstrument-functions" } */
3 /* { dg-xfail-run-if "" { powerpc-ibm-aix* } } */
5 extern void abort (void);
7 #define ASSERT(X) if (!(X)) abort ();
8 #define NOCHK __attribute__ ((no_instrument_function))
10 int entry_calls, exit_calls;
11 void (*last_fn_entered)();
12 void (*last_fn_exited)();
14 __attribute__ ((noinline))
15 int main () NOCHK;
17 __attribute__ ((noinline))
18 void foo ()
20 ASSERT (last_fn_entered == foo);
23 __attribute__ ((noinline))
24 static void foo2 ()
26 ASSERT (entry_calls == 1 && exit_calls == 0);
27 ASSERT (last_fn_entered == foo2);
28 foo ();
29 ASSERT (entry_calls == 2 && exit_calls == 1);
30 ASSERT (last_fn_entered == foo);
31 ASSERT (last_fn_exited == foo);
34 __attribute__ ((noinline))
35 void nfoo (void) NOCHK;
36 void nfoo ()
38 ASSERT (entry_calls == 2 && exit_calls == 2);
39 ASSERT (last_fn_entered == foo);
40 ASSERT (last_fn_exited == foo2);
41 foo ();
42 ASSERT (entry_calls == 3 && exit_calls == 3);
43 ASSERT (last_fn_entered == foo);
44 ASSERT (last_fn_exited == foo);
47 int main ()
49 ASSERT (entry_calls == 0 && exit_calls == 0);
51 foo2 ();
53 ASSERT (entry_calls == 2 && exit_calls == 2);
54 ASSERT (last_fn_entered == foo);
55 ASSERT (last_fn_exited == foo2);
57 nfoo ();
59 ASSERT (entry_calls == 3 && exit_calls == 3);
60 ASSERT (last_fn_entered == foo);
62 return 0;
65 void __cyg_profile_func_enter (void (*fn)(), void (*parent)()) NOCHK;
66 void __cyg_profile_func_exit (void (*fn)(), void (*parent)()) NOCHK;
68 __attribute__ ((noinline))
69 void __cyg_profile_func_enter (void (*fn)(), void (*parent)())
71 entry_calls++;
72 last_fn_entered = fn;
74 __attribute__ ((noinline))
75 void __cyg_profile_func_exit (void (*fn)(), void (*parent)())
77 exit_calls++;
78 last_fn_exited = fn;