pass-function.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // RUN: %clangxx %s -g -fexceptions %extra-clang-opts -o %t
  2. // RUN: %Test_jit_debuginfo %s %t
  3. // DEBUGGER: set breakpoint pending on
  4. // DEBUGGER: break function_test
  5. // DEBUGGER: break %s:47
  6. // DEBUGGER: break %s:55
  7. // DEBUGGER: break %s:60
  8. // DEBUGGER: break %s:66
  9. // DEBUGGER: break %s:69
  10. // DEBUGGER: run
  11. // DEBUGGER: bt 2
  12. // CHECK: #0
  13. // CHECK: function_test
  14. // CHECK: #1
  15. // CHECK: main
  16. // DEBUGGER: continue
  17. // DEBUGGER: print j
  18. // CHECK: $1 = 0
  19. // DEBUGGER: step
  20. // DEBUGGER: print j
  21. // CHECK: $2 = 1
  22. // DEBUGGER: continue
  23. // DEBUGGER: print j
  24. // CHECK: $3 = -1
  25. // DEBUGGER: continue
  26. // DEBUGGER: bt 3
  27. // CHECK: #0
  28. // CHECK: inline_test
  29. // CHECK: #1
  30. // CHECK: function_test
  31. // CHECK: #2
  32. // CHECK: main
  33. // DEBUGGER: continue
  34. // DEBUGGER: print j
  35. // CHECK: $4 = 2
  36. // DEBUGGER: continue
  37. // DEBUGGER: print j
  38. // CHECK: $5 = 0
  39. // DEBUGGER: continue
  40. __attribute__((noinline)) static int function_test();
  41. __attribute__((always_inline)) static int inline_test();
  42. int inline_test()
  43. {
  44. int i = 0;
  45. i++;
  46. return i;
  47. }
  48. int function_test(int c)
  49. {
  50. int i, j = 0;
  51. for (i = 0; i < c; i++) {
  52. j++;
  53. }
  54. {
  55. int j = -1;
  56. j++;
  57. }
  58. j += inline_test();
  59. if (j > 0) {
  60. j = 0;
  61. }
  62. return j;
  63. }
  64. int main(int argc, char** argv)
  65. {
  66. return function_test(1);
  67. }