C++程序  |  76行  |  1.24 KB

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