1094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// RUN: %clangxx %s -g -fexceptions %extra-clang-opts -o %t
2094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// RUN: %Test_jit_debuginfo %s %t
3094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: set breakpoint pending on
4094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break function_test
5094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break %s:47
6094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break %s:55
7094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break %s:60
8094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break %s:66
9094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: break %s:69
10094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: run
11094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: bt 2
12094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: #0
13094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK:  function_test
14094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: #1
15094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK:  main
16094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
17094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: print j
18094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: $1 = 0
19094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: step
20094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: print j
21094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: $2 = 1
22094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
23094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: print j
24094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: $3 = -1
25094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
26094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: bt 3
27094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: #0
28094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK:  inline_test
29094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: #1
30094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK:  function_test
31094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: #2
32094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK:  main
33094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
34094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: print j
35094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: $4 = 2
36094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
37094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: print j
38094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// CHECK: $5 = 0
39094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea// DEBUGGER: continue
40094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
41094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea__attribute__((noinline)) static int function_test();
42094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea__attribute__((always_inline)) static int inline_test();
43094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
44094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaint inline_test()
45094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea{
46094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  int i = 0;
47094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  i++;
48094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  return i;
49094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea}
50094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
51094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaint function_test(int c)
52094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea{
53094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  int i, j = 0;
54094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  for (i = 0; i < c; i++) {
55094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    j++;
56094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  }
57094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
58094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  {
59094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    int j = -1;
60094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    j++;
61094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  }
62094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
63094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  j += inline_test();
64094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
65094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  if (j > 0) {
66094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea    j = 0;
67094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  }
68094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
69094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  return j;
70094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea}
71094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea
72094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Maleaint main(int argc, char** argv)
73094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea{
74094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea  return function_test(1);
75094881f513ab366f7ffd0b2c7778ab50281ca59eDaniel Malea}
76