145a40c16SStephen Tozer // RUN: %clang++ -std=gnu++11 -O2 -g %s -o %t
21364750dSJames Henderson // RUN: %dexter --fail-lt 1.0 -w \
345a40c16SStephen Tozer // RUN: --binary %t --debugger 'lldb' -- %s
445a40c16SStephen Tozer // RUN: %clang++ -std=gnu++11 -O0 -g %s -o %t
51364750dSJames Henderson // RUN: %dexter --fail-lt 1.0 -w \
645a40c16SStephen Tozer // RUN: --binary %t --debugger 'lldb' -- %s
71364750dSJames Henderson
82234f582SJonas Devlieghere // REQUIRES: lldb, D136396
9*43d70e46SStephen Tozer // Currently getting intermittent failures on darwin.
10*43d70e46SStephen Tozer // UNSUPPORTED: system-windows, system-darwin
111364750dSJames Henderson
121364750dSJames Henderson //// Check that the debugging experience with __attribute__((optnone)) at O2
131364750dSJames Henderson //// matches O0. Test simple functions performing simple arithmetic
141364750dSJames Henderson //// operations and small loops.
151364750dSJames Henderson
161364750dSJames Henderson __attribute__((optnone))
test1(int test1_a,int test1_b)171364750dSJames Henderson int test1(int test1_a, int test1_b) {
181364750dSJames Henderson int test1_result = 0;
191364750dSJames Henderson // DexLabel('test1_start')
201364750dSJames Henderson test1_result = test1_a + test1_b; // DexExpectStepOrder(1)
211364750dSJames Henderson return test1_result; // DexExpectStepOrder(2)
221364750dSJames Henderson // DexLabel('test1_end')
231364750dSJames Henderson }
241364750dSJames Henderson // DexExpectWatchValue('test1_a', 3, from_line=ref('test1_start'), to_line=ref('test1_end'))
251364750dSJames Henderson // DexExpectWatchValue('test1_b', 4, from_line=ref('test1_start'), to_line=ref('test1_end'))
261364750dSJames Henderson // DexExpectWatchValue('test1_result', 0, 7, from_line=ref('test1_start'), to_line=ref('test1_end'))
271364750dSJames Henderson
281364750dSJames Henderson __attribute__((optnone))
test2(int test2_a,int test2_b)291364750dSJames Henderson int test2(int test2_a, int test2_b) {
301364750dSJames Henderson int test2_result = test2_a + test2_a + test2_a + test2_a; // DexExpectStepOrder(3)
311364750dSJames Henderson // DexLabel('test2_start')
321364750dSJames Henderson return test2_a << 2; // DexExpectStepOrder(4)
331364750dSJames Henderson // DexLabel('test2_end')
341364750dSJames Henderson }
351364750dSJames Henderson // DexExpectWatchValue('test2_a', 1, from_line=ref('test2_start'), to_line=ref('test2_end'))
361364750dSJames Henderson // DexExpectWatchValue('test2_b', 2, from_line=ref('test2_start'), to_line=ref('test2_end'))
371364750dSJames Henderson // DexExpectWatchValue('test2_result', 4, from_line=ref('test2_start'), to_line=ref('test2_end'))
381364750dSJames Henderson
391364750dSJames Henderson __attribute__((optnone))
test3(int test3_a,int test3_b)401364750dSJames Henderson int test3(int test3_a, int test3_b) {
411364750dSJames Henderson int test3_temp1 = 0, test3_temp2 = 0;
421364750dSJames Henderson // DexLabel('test3_start')
431364750dSJames Henderson test3_temp1 = test3_a + 5; // DexExpectStepOrder(5)
441364750dSJames Henderson test3_temp2 = test3_b + 5; // DexExpectStepOrder(6)
451364750dSJames Henderson if (test3_temp1 > test3_temp2) { // DexExpectStepOrder(7)
461364750dSJames Henderson test3_temp1 *= test3_temp2; // DexUnreachable()
471364750dSJames Henderson }
481364750dSJames Henderson return test3_temp1; // DexExpectStepOrder(8)
491364750dSJames Henderson // DexLabel('test3_end')
501364750dSJames Henderson }
511364750dSJames Henderson // DexExpectWatchValue('test3_a', 5, from_line=ref('test3_start'), to_line=ref('test3_end'))
521364750dSJames Henderson // DexExpectWatchValue('test3_b', 6, from_line=ref('test3_start'), to_line=ref('test3_end'))
531364750dSJames Henderson // DexExpectWatchValue('test3_temp1', 0, 10, from_line=ref('test3_start'), to_line=ref('test3_end'))
541364750dSJames Henderson // DexExpectWatchValue('test3_temp2', 0, 11, from_line=ref('test3_start'), to_line=ref('test3_end'))
551364750dSJames Henderson
561364750dSJames Henderson unsigned num_iterations = 4;
571364750dSJames Henderson
581364750dSJames Henderson __attribute__((optnone))
test4(int test4_a,int test4_b)591364750dSJames Henderson int test4(int test4_a, int test4_b) {
601364750dSJames Henderson int val1 = 0, val2 = 0;
611364750dSJames Henderson // DexLabel('test4_start')
621364750dSJames Henderson
631364750dSJames Henderson val1 = (test4_a > test4_b) ? test4_a : test4_b; // DexExpectStepOrder(9)
641364750dSJames Henderson val2 = val1;
651364750dSJames Henderson val2 += val1; // DexExpectStepOrder(10)
661364750dSJames Henderson
671364750dSJames Henderson for (unsigned i=0; i != num_iterations; ++i) { // DexExpectStepOrder(11, 13, 15, 17, 19)
681364750dSJames Henderson val1--;
691364750dSJames Henderson val2 += i;
701364750dSJames Henderson if (val2 % 2 == 0) // DexExpectStepOrder(12, 14, 16, 18)
711364750dSJames Henderson val2 /= 2;
721364750dSJames Henderson }
731364750dSJames Henderson
741364750dSJames Henderson return (val1 > val2) ? val2 : val1; // DexExpectStepOrder(20)
751364750dSJames Henderson // DexLabel('test4_end')
761364750dSJames Henderson }
771364750dSJames Henderson // DexExpectWatchValue('test4_a', 1, from_line=ref('test4_start'), to_line=ref('test4_end'))
781364750dSJames Henderson // DexExpectWatchValue('test4_b', 9, from_line=ref('test4_start'), to_line=ref('test4_end'))
791364750dSJames Henderson // DexExpectWatchValue('val1', 0, 9, 8, 7, 6, 5, from_line=ref('test4_start'), to_line=ref('test4_end'))
801364750dSJames Henderson // DexExpectWatchValue('val2', 0, 9, 18, 9, 10, 5, 7, 10, 5, 9, from_line=ref('test4_start'), to_line=ref('test4_end'))
811364750dSJames Henderson
821364750dSJames Henderson __attribute__((optnone))
test5(int test5_val)831364750dSJames Henderson int test5(int test5_val) {
841364750dSJames Henderson int c = 1; // DexExpectStepOrder(21)
851364750dSJames Henderson // DexLabel('test5_start')
861364750dSJames Henderson if (test5_val) // DexExpectStepOrder(22)
871364750dSJames Henderson c = 5; // DexExpectStepOrder(23)
881364750dSJames Henderson return c ? test5_val : test5_val; // DexExpectStepOrder(24)
891364750dSJames Henderson // DexLabel('test5_end')
901364750dSJames Henderson }
911364750dSJames Henderson // DexExpectWatchValue('test5_val', 7, from_line=ref('test5_start'), to_line=ref('test5_end'))
921364750dSJames Henderson // DexExpectWatchValue('c', 1, 5, from_line=ref('test5_start'), to_line=ref('test5_end'))
931364750dSJames Henderson
94e5244706SGuozhi Wei __attribute__((optnone))
main()951364750dSJames Henderson int main() {
961364750dSJames Henderson int main_result = 0;
971364750dSJames Henderson // DexLabel('main_start')
981364750dSJames Henderson main_result = test1(3,4);
991364750dSJames Henderson main_result += test2(1,2);
1001364750dSJames Henderson main_result += test3(5,6);
1011364750dSJames Henderson main_result += test4(1,9);
1021364750dSJames Henderson main_result += test5(7);
1031364750dSJames Henderson return main_result;
1041364750dSJames Henderson // DexLabel('main_end')
1051364750dSJames Henderson }
1061364750dSJames Henderson // DexExpectWatchValue('main_result', 0, 7, 11, 21, 26, 33, from_line=ref('main_start'), to_line=ref('main_end'))
107