// RUN: %clangxx %s -g -fexceptions %extra-clang-opts -o %t
// RUN: %Test_jit_debuginfo %s %t
// DEBUGGER: set breakpoint pending on
// DEBUGGER: break function_test
// DEBUGGER: break %s:47
// DEBUGGER: break %s:55
// DEBUGGER: break %s:60
// DEBUGGER: break %s:66
// DEBUGGER: break %s:69
// DEBUGGER: run
// DEBUGGER: bt 2
// CHECK: #0
// CHECK: function_test
// CHECK: #1
// CHECK: main
// DEBUGGER: continue
// DEBUGGER: print j
// CHECK: $1 = 0
// DEBUGGER: step
// DEBUGGER: print j
// CHECK: $2 = 1
// DEBUGGER: continue
// DEBUGGER: print j
// CHECK: $3 = -1
// DEBUGGER: continue
// DEBUGGER: bt 3
// CHECK: #0
// CHECK: inline_test
// CHECK: #1
// CHECK: function_test
// CHECK: #2
// CHECK: main
// DEBUGGER: continue
// DEBUGGER: print j
// CHECK: $4 = 2
// DEBUGGER: continue
// DEBUGGER: print j
// CHECK: $5 = 0
// DEBUGGER: continue
__attribute__((noinline)) static int function_test();
__attribute__((always_inline)) static int inline_test();
int inline_test()
{
int i = 0;
i++;
return i;
}
int function_test(int c)
{
int i, j = 0;
for (i = 0; i < c; i++) {
j++;
}
{
int j = -1;
j++;
}
j += inline_test();
if (j > 0) {
j = 0;
}
return j;
}
int main(int argc, char** argv)
{
return function_test(1);
}