// RUN: %dexter --fail-lt 1.0 -w \
// RUN:     --builder 'clang' --debugger 'lldb' \
// RUN:     --cflags "-O2 -g" -- %s
// RUN: %dexter --fail-lt 1.0 -w \
// RUN:     --builder 'clang' --debugger 'lldb' \
// RUN:     --cflags "-O0 -g" -- %s

// REQUIRES: lldb
// UNSUPPORTED: system-windows

//// Check that the debugging experience with __attribute__((optnone)) at O2
//// matches O0. Test simple functions performing simple arithmetic
//// operations and small loops.

__attribute__((optnone))
int test1(int test1_a, int test1_b) {
  int test1_result = 0;
  // DexLabel('test1_start')
  test1_result = test1_a + test1_b; // DexExpectStepOrder(1)
  return test1_result; // DexExpectStepOrder(2)
  // DexLabel('test1_end')
}
// DexExpectWatchValue('test1_a', 3, from_line='test1_start', to_line='test1_end')
// DexExpectWatchValue('test1_b', 4, from_line='test1_start', to_line='test1_end')
// DexExpectWatchValue('test1_result', 0, 7, from_line='test1_start', to_line='test1_end')

__attribute__((optnone))
int test2(int test2_a, int test2_b) {
  int test2_result = test2_a + test2_a + test2_a + test2_a;  // DexExpectStepOrder(3)
  // DexLabel('test2_start')
  return test2_a << 2;   // DexExpectStepOrder(4)
  // DexLabel('test2_end')
}
// DexExpectWatchValue('test2_a', 1, from_line='test2_start', to_line='test2_end')
// DexExpectWatchValue('test2_b', 2, from_line='test2_start', to_line='test2_end')
// DexExpectWatchValue('test2_result', 4, from_line='test2_start', to_line='test2_end')

__attribute__((optnone))
int test3(int test3_a, int test3_b) {
  int test3_temp1 = 0, test3_temp2 = 0;
  // DexLabel('test3_start')
  test3_temp1 = test3_a + 5;   // DexExpectStepOrder(5)
  test3_temp2 = test3_b + 5;   // DexExpectStepOrder(6)
  if (test3_temp1 > test3_temp2) { // DexExpectStepOrder(7)
    test3_temp1 *= test3_temp2;    // DexUnreachable()
  }
  return test3_temp1; // DexExpectStepOrder(8)
  // DexLabel('test3_end')
}
// DexExpectWatchValue('test3_a', 5, from_line='test3_start', to_line='test3_end')
// DexExpectWatchValue('test3_b', 6, from_line='test3_start', to_line='test3_end')
// DexExpectWatchValue('test3_temp1', 0, 10, from_line='test3_start', to_line='test3_end')
// DexExpectWatchValue('test3_temp2', 0, 11, from_line='test3_start', to_line='test3_end')

unsigned num_iterations = 4;

__attribute__((optnone))
int test4(int test4_a, int test4_b) {
  int val1 = 0, val2 = 0;
  // DexLabel('test4_start')

  val1 = (test4_a > test4_b) ? test4_a : test4_b; // DexExpectStepOrder(9)
  val2 = val1;
  val2 += val1; // DexExpectStepOrder(10)

  for (unsigned i=0; i != num_iterations; ++i) { // DexExpectStepOrder(11, 13, 15, 17, 19)
    val1--;
    val2 += i;
    if (val2 % 2 == 0) // DexExpectStepOrder(12, 14, 16, 18)
      val2 /= 2;
  }

  return (val1 > val2) ? val2 : val1; // DexExpectStepOrder(20)
  // DexLabel('test4_end')
}
// DexExpectWatchValue('test4_a', 1, from_line='test4_start', to_line='test4_end')
// DexExpectWatchValue('test4_b', 9, from_line='test4_start', to_line='test4_end')
// DexExpectWatchValue('val1', 0, 9, 8, 7, 6, 5, from_line='test4_start', to_line='test4_end')
// DexExpectWatchValue('val2', 0, 9, 18, 9, 10, 5, 7, 10, 5, 9, from_line='test4_start', to_line='test4_end')

__attribute__((optnone))
int test5(int test5_val) {
  int c = 1;      // DexExpectStepOrder(21)
  // DexLabel('test5_start')
  if (test5_val)  // DexExpectStepOrder(22)
    c = 5;        // DexExpectStepOrder(23)
  return c ? test5_val : test5_val; // DexExpectStepOrder(24)
  // DexLabel('test5_end')
}
// DexExpectWatchValue('test5_val', 7, from_line='test5_start', to_line='test5_end')
// DexExpectWatchValue('c', 1, 5, from_line='test5_start', to_line='test5_end')

int main() {
  int main_result = 0;
  // DexLabel('main_start')
  main_result = test1(3,4);
  main_result += test2(1,2);
  main_result += test3(5,6);
  main_result += test4(1,9);
  main_result += test5(7);
  return main_result;
  // DexLabel('main_end')
}
// DexExpectWatchValue('main_result', 0, 7, 11, 21, 26, 33, from_line='main_start', to_line='main_end')
