annotate gcc/testsuite/gcc.dg/sibcall-7.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Simple check that tail recursive call optimization is also
kono
parents:
diff changeset
2 controlled by -foptimize-sibling-calls.
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 Copyright (C) 2006 Free Software Foundation Inc.
kono
parents:
diff changeset
5 Original test by Hans-Peter Nilsson <hp@bitrange.com> */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 /* On IA64 the call frame is allocated on the register stack, not the
kono
parents:
diff changeset
8 normal stack. */
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 /* { dg-do run { target { ! "ia64-*-*" } } } */
kono
parents:
diff changeset
11 /* { dg-options "-O2 -fno-optimize-sibling-calls" } */
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 extern void abort (void);
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 extern void recurser_void (int);
kono
parents:
diff changeset
17 extern void track (int);
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 int main (void)
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 recurser_void (0);
kono
parents:
diff changeset
22 return 0;
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 void recurser_void (int n)
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 if (n == 0 || n == 7)
kono
parents:
diff changeset
28 track (n);
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 if (n == 10)
kono
parents:
diff changeset
31 return;
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 recurser_void (n + 1);
kono
parents:
diff changeset
34 }
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 void *trackpoint;
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 void track (int n)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 char stackpos[1];
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 if (n == 0)
kono
parents:
diff changeset
43 trackpoint = stackpos;
kono
parents:
diff changeset
44 else if (n != 7 || trackpoint == stackpos)
kono
parents:
diff changeset
45 abort ();
kono
parents:
diff changeset
46 }