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