| // 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); |
| } |