1734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// This is a test for complicated stack traces.
2734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//
3734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-A.vgtest, the stack trace is larger than the asked-for depth
4734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   (12 vs. 8) so not all of the trace is shown.
5734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-B.vgtest, we have --alloc-fn=a6..a12, which means that get_XCon
6734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   needs to redo the IP getting, because 7 functions get removed from the
7734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   trace, which is more than the initial overestimate of 3.
8734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-C.vgtest, we have --alloc-fn=a3..a12, which means that get_XCon
9734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   ends up with an empty stack trace after removing all the alloc-fns.
10734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   It then redoes it.
11734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-D.vgtest, we have --alloc-fn=main..a12, which means we have a
12734b805cb3af82ddd7d3ba22a0e22aba29b78305njn//   stack trace with a single "(below main)" entry.
13734b805cb3af82ddd7d3ba22a0e22aba29b78305njn
14734b805cb3af82ddd7d3ba22a0e22aba29b78305njn#include <stdlib.h>
15734b805cb3af82ddd7d3ba22a0e22aba29b78305njn
16734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a12(int n) { malloc(n); }
17734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a11(int n) { a12(n); }
18734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a10(int n) { a11(n); }
19734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a9 (int n) { a10(n); }
20734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a8 (int n) { a9 (n); }
21734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a7 (int n) { a8 (n); }
22734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a6 (int n) { a7 (n); }
23734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a5 (int n) { a6 (n); }
24734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a4 (int n) { a5 (n); }
25734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a3 (int n) { a4 (n); }
26734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a2 (int n) { a3 (n); }
27734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a1 (int n) { a2 (n); }
28734b805cb3af82ddd7d3ba22a0e22aba29b78305njn
29734b805cb3af82ddd7d3ba22a0e22aba29b78305njnint main(void)
30734b805cb3af82ddd7d3ba22a0e22aba29b78305njn{
31734b805cb3af82ddd7d3ba22a0e22aba29b78305njn   int i;
32734b805cb3af82ddd7d3ba22a0e22aba29b78305njn
33734b805cb3af82ddd7d3ba22a0e22aba29b78305njn   // This one exceeds the default --depth.
34734b805cb3af82ddd7d3ba22a0e22aba29b78305njn   for (i = 0; i < 10; i++)
35466ed6e1efeab3b32a30a9002622fb03c0686688njn      a1(400);    // divisible by 16 -- no slop
36734b805cb3af82ddd7d3ba22a0e22aba29b78305njn
37734b805cb3af82ddd7d3ba22a0e22aba29b78305njn   return 0;
38734b805cb3af82ddd7d3ba22a0e22aba29b78305njn}
39