From: Keith Seitz Date: Thu, 8 Dec 2016 20:49:59 +0000 (-0800) Subject: CompileExpression redesign and enable/fix print tests. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8a2bb5202958d474d2ceaee7c53f1cc1e1682f2b;p=thirdparty%2Fbinutils-gdb.git CompileExpression redesign and enable/fix print tests. --- diff --git a/gdb/testsuite/gdb.compile/cp-simple-anonymous.exp b/gdb/testsuite/gdb.compile/cp-simple-anonymous.exp index 8822187c868..46db50f1d93 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-anonymous.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-anonymous.exp @@ -44,14 +44,12 @@ gdb_continue_to_breakpoint "testing location" # Reminder, "var" is an integer; all these types get converted to `int'. CompileExpression::new "var" -CompileExpression::add_imp "anon_e" 3 -CompileExpression::add_imp "anon_u.aa" {97( 'a')?} -CompileExpression::add_imp "anon_s.len" 11 -CompileExpression::add_imp "a.u.b" 0 -CompileExpression::add_imp "a.s.len" 5 -CompileExpression::add_imp "a.e" 10 -CompileExpression::add_imp "(*anon_s.ptr == 'a')" (1|true) -CompileExpression::add_imp "(*a.s.ptr != 'h')" (0|false) -CompileExpression::add_imp "A::BB" 11 -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "anon_e" 3 +CompileExpression::test "anon_u.aa" {97( 'a')?} +CompileExpression::test "anon_s.len" 11 +CompileExpression::test "a.u.b" 0 +CompileExpression::test "a.s.len" 5 +CompileExpression::test "a.e" 10 +CompileExpression::test "(*anon_s.ptr == 'a')" (1|true) +CompileExpression::test "(*a.s.ptr != 'h')" (0|false) +CompileExpression::test "A::BB" 11 diff --git a/gdb/testsuite/gdb.compile/cp-simple-inherit.exp b/gdb/testsuite/gdb.compile/cp-simple-inherit.exp index 3f5dc6da347..8293ccbe853 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-inherit.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-inherit.exp @@ -1,4 +1,4 @@ -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015, 2016 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,12 +43,10 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "d.a_" 1 -CompileExpression::add_imp "d.b_" 2 -CompileExpression::add_imp "d.c_" 3 -CompileExpression::add_imp "d.d_" 4 -CompileExpression::add_imp "d.A::do_it (1);" 2 -CompileExpression::add_imp "d.B::do_it (1);" 1 -CompileExpression::add_imp "d.C::do_it (1);" 3 -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "d.a_" 1 +CompileExpression::test "d.b_" 2 +CompileExpression::test "d.c_" 3 +CompileExpression::test "d.d_" 4 +CompileExpression::test "d.A::do_it (1);" 2 +CompileExpression::test "d.B::do_it (1);" 1 +CompileExpression::test "d.C::do_it (1);" 3 diff --git a/gdb/testsuite/gdb.compile/cp-simple-member.exp b/gdb/testsuite/gdb.compile/cp-simple-member.exp index cd1af8aae9d..5d759bcf17f 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-member.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-member.exp @@ -43,22 +43,21 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "a.public_" 1 -CompileExpression::add_imp "a.protected_" 21 -CompileExpression::add_imp "a.private_" 3 -CompileExpression::add_imp "A::s_public_" 10 -CompileExpression::add_imp "A::s_protected_" 20 -CompileExpression::add_imp "A::s_private_" 12 -CompileExpression::add_exp "A::ATYPE i = 10; var = i;" 10 -CompileExpression::add_imp "get_values (a)" 85 -CompileExpression::add_exp "myenum me = E_B; var = me;" 11 -CompileExpression::add_exp "A::s_protected_ = N::AB; var = A::s_protected_;" 21 -CompileExpression::add_exp "A::s_private_ = E_B; var = A::s_private_;" 11 -CompileExpression::add_exp "N::ANON_E ae = N::AD; var = ae;" 23 -CompileExpression::add_imp {a.*pmi} 1 -CompileExpression::add_exp {a.public_ = 2; var = a.*pmi; a.public_ = 1} 2 -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "a.public_" 1 +CompileExpression::test "a.protected_" {(21|N::AB)} +CompileExpression::test "a.private_" 3 +CompileExpression::test "A::s_public_" 10 +CompileExpression::test "A::s_protected_" {(20|N::AA)} +CompileExpression::test "A::s_private_" 12 +CompileExpression::test "A::ATYPE i = 10; var = i;" 10 -explicit +CompileExpression::test "get_values (a)" 85 +CompileExpression::test "myenum me = E_B; var = me;" 11 -explicit +CompileExpression::test "A::s_protected_ = N::AB; var = A::s_protected_;" \ + 21 -explicit +CompileExpression::test "A::s_private_ = E_B; var = A::s_private_;" 11 -explicit +CompileExpression::test "N::ANON_E ae = N::AD; var = ae;" 23 -explicit +CompileExpression::test {a.*pmi} 1 +CompileExpression::test {a.public_ = 2; var = a.*pmi; a.public_ = 1} 2 -explicit # Test some compilation failures set failed {\r\nCompilation failed\.} diff --git a/gdb/testsuite/gdb.compile/cp-simple-method.exp b/gdb/testsuite/gdb.compile/cp-simple-method.exp index 6a18e51a718..9387c8fb980 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-method.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-method.exp @@ -43,26 +43,24 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "a->get_var ();" 21 -CompileExpression::add_imp "a->get_var (static_cast (1));" 100 -CompileExpression::add_imp "a->get_var (static_cast (1));" 101 -CompileExpression::add_imp "a->get_var (static_cast (1));" 102 -CompileExpression::add_imp "a->get_var (static_cast (a));" 103 -CompileExpression::add_imp "a->get_var (*a);" 104 -CompileExpression::add_imp "a->get_var (*ac);" 105 -CompileExpression::add_imp "a->get_var1 (1);" 42 -CompileExpression::add_imp "a->get_var2 (1, 2);" 88 -CompileExpression::add_imp "A::get_1 (1);" 2 -CompileExpression::add_imp "A::get_2 (1, 2);" 5 -CompileExpression::add_imp "A::get_1 (a->get_var ());" 22 -CompileExpression::add_imp "a->get_var1 (a->get_var () - 16);" 672 -CompileExpression::add_imp "a->get_var2 (a->get_var (), A::get_1 (2));" 336 -CompileExpression::add_imp "get_value ()" 200 -CompileExpression::add_imp "get_value (a)" 21 -CompileExpression::add_imp "get_value (get_value ())" 200 -CompileExpression::add_imp {(a->*pmf) (1)} 101 -CompileExpression::add_exp {pmf = &A::get_var1; var = (a->*pmf) (2); pmf = &A::get_var} 84 -CompileExpression::add_imp {(a->**pmf_p) (1)} 101 - -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "a->get_var ();" 21 +CompileExpression::test "a->get_var (static_cast (1));" 100 +CompileExpression::test "a->get_var (static_cast (1));" 101 +CompileExpression::test "a->get_var (static_cast (1));" 102 +CompileExpression::test "a->get_var (static_cast (a));" 103 +CompileExpression::test "a->get_var (*a);" 104 +CompileExpression::test "a->get_var (*ac);" 105 +CompileExpression::test "a->get_var1 (1);" 42 +CompileExpression::test "a->get_var2 (1, 2);" 88 +CompileExpression::test "A::get_1 (1);" 2 +CompileExpression::test "A::get_2 (1, 2);" 5 +CompileExpression::test "A::get_1 (a->get_var ());" 22 +CompileExpression::test "a->get_var1 (a->get_var () - 16);" 672 +CompileExpression::test "a->get_var2 (a->get_var (), A::get_1 (2));" 336 +CompileExpression::test "get_value ()" 200 +CompileExpression::test "get_value (a)" 21 +CompileExpression::test "get_value (get_value ())" 200 +CompileExpression::test {(a->*pmf) (1)} 101 +CompileExpression::test \ + {pmf = &A::get_var1; var = (a->*pmf) (2); pmf = &A::get_var} 84 -explicit +CompileExpression::test {(a->**pmf_p) (1)} 101 diff --git a/gdb/testsuite/gdb.compile/cp-simple-nested.exp b/gdb/testsuite/gdb.compile/cp-simple-nested.exp index ea94476ff56..74d3d6a962a 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-nested.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-nested.exp @@ -43,11 +43,10 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "i1.a_" 2 -CompileExpression::add_imp "i2.a_" 3 -CompileExpression::add_exp "A::Inner1 *i1p = &i1; var = i1p->a_;" 2 -CompileExpression::add_exp "A::Inner1::Inner2 *i2p = &i2; var = i2p->a_;" 3 -CompileExpression::add_exp "A::Inner1 &r1 = i1; var = r1.a_;" 2 -CompileExpression::add_exp "A::Inner1::Inner2 &r2 = i2; var = r2.a_;" 3 -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "i1.a_" 2 +CompileExpression::test "i2.a_" 3 +CompileExpression::test "A::Inner1 *i1p = &i1; var = i1p->a_;" 2 -explicit +CompileExpression::test "A::Inner1::Inner2 *i2p = &i2; var = i2p->a_;" 3 \ + -explicit +CompileExpression::test "A::Inner1 &r1 = i1; var = r1.a_;" 2 -explicit +CompileExpression::test "A::Inner1::Inner2 &r2 = i2; var = r2.a_;" 3 -explicit diff --git a/gdb/testsuite/gdb.compile/cp-simple-ns.exp b/gdb/testsuite/gdb.compile/cp-simple-ns.exp index adc6af2ffbb..0c5ff1d0e7f 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-ns.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-ns.exp @@ -1,4 +1,4 @@ -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015, 2016 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,10 +41,8 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "N1::N2::N3::N4::n4static;" 400 -CompileExpression::add_imp "N1::N2::N3::N4::S4::s4static;" 40 -CompileExpression::add_imp "s.s4int_;" 4 -CompileExpression::add_imp "N1::N2::N3::N4::S4::get_svar ();" 40 -CompileExpression::add_imp "s.get_var ();" 4 -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "N1::N2::N3::N4::n4static;" 400 +CompileExpression::test "N1::N2::N3::N4::S4::s4static;" 40 +CompileExpression::test "s.s4int_;" 4 +CompileExpression::test "N1::N2::N3::N4::S4::get_svar ();" 40 +CompileExpression::test "s.get_var ();" 4 diff --git a/gdb/testsuite/gdb.compile/cp-simple-template.exp b/gdb/testsuite/gdb.compile/cp-simple-template.exp index c670aa7379c..9919c24b42d 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-template.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-template.exp @@ -43,37 +43,34 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "mytemplate ()" -1 -CompileExpression::add_imp "mytemplate (1)" 2 -CompileExpression::add_imp "mytemplate<0> ()" 0 -CompileExpression::add_imp "mytemplate ()" 100 -CompileExpression::add_imp "a.tempmethod ()" 20 \ +CompileExpression::test "mytemplate ()" -1 +CompileExpression::test "mytemplate (1)" 2 +CompileExpression::test "mytemplate<0> ()" 0 +CompileExpression::test "mytemplate ()" 100 +CompileExpression::test "a.tempmethod ()" {(20|{value = 20})} \ -print {xfail *-*-* gcc/debug/49348} \ -value {xfail *-*-* gcc/debug/49348} -CompileExpression::add_imp "a.tempmethod ()" 20 -CompileExpression::add_imp "a.tempmethod ()" -20 -CompileExpression::add_imp "defaultvals ()" 10 -CompileExpression::add_imp "defaultvals ()" 20 -CompileExpression::add_imp "deduct (1234)" 1234 -CompileExpression::add_imp "o + 3" -33 -CompileExpression::add_imp "mod_test (i)" 1 -CompileExpression::add_imp "mod_test (cpi)" 2 -CompileExpression::add_imp "mod_test (cpci)" 3 -CompileExpression::add_imp "cddd.get1 ()" -30 -CompileExpression::add_imp "cddd.get2 ()" 107 -CompileExpression::add_imp "cddd.get3 ()" 3 -CompileExpression::add_imp "cdd.get1 ()" 100 -CompileExpression::add_imp "cdd.get2 ()" 107 -CompileExpression::add_imp "cdd.get3 ()" 3 -CompileExpression::add_imp "cd.get1 ()" 101 -CompileExpression::add_imp "cd.get2 ()" 107 -CompileExpression::add_imp "cd.get3 ()" 3 -CompileExpression::add_imp "c.get1 ()" 102 -CompileExpression::add_imp "c.get2 ()" 107 -CompileExpression::add_imp "c.get3 ()" 12 - -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "a.tempmethod ()" {(20|{value = 20})} +CompileExpression::test "a.tempmethod ()" -20 +CompileExpression::test "defaultvals ()" {(10|{value = 10})} +CompileExpression::test "defaultvals ()" 20 +CompileExpression::test "deduct (1234)" 1234 +CompileExpression::test "o + 3" {(-33|{v_ = 33})} +CompileExpression::test "mod_test (i)" 1 +CompileExpression::test "mod_test (cpi)" 2 +CompileExpression::test "mod_test (cpci)" 3 +CompileExpression::test "cddd.get1 ()" {(-30|{v_ = 30})} +CompileExpression::test "cddd.get2 ()" 107 +CompileExpression::test "cddd.get3 ()" 3 +CompileExpression::test "cdd.get1 ()" 100 +CompileExpression::test "cdd.get2 ()" 107 +CompileExpression::test "cdd.get3 ()" 3 +CompileExpression::test "cd.get1 ()" 101 +CompileExpression::test "cd.get2 ()" {107( 'k')?} +CompileExpression::test "cd.get3 ()" 3 +CompileExpression::test "c.get1 ()" 102 +CompileExpression::test "c.get2 ()" {107( 'k')?} +CompileExpression::test "c.get3 ()" 12 # Some explicit tests that don't fit neatly into CompileExpression (yet) gdb_test "compile print ret_test()" \ diff --git a/gdb/testsuite/gdb.compile/cp-simple-virtual.exp b/gdb/testsuite/gdb.compile/cp-simple-virtual.exp index eb2cce666fc..f56fe0414ff 100644 --- a/gdb/testsuite/gdb.compile/cp-simple-virtual.exp +++ b/gdb/testsuite/gdb.compile/cp-simple-virtual.exp @@ -1,4 +1,4 @@ -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015, 2016 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,32 +43,29 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile] gdb_continue_to_breakpoint "testing location" CompileExpression::new "var" -CompileExpression::add_imp "b.doit ()" 2 -CompileExpression::add_imp "c.doit ()" 3 -CompileExpression::add_imp "d.doit ()" 4 -CompileExpression::add_imp "ap->doit ()" 4 -CompileExpression::add_imp "b.doit2 ()" 22 -CompileExpression::add_imp "c.doit2 ()" 33 -CompileExpression::add_imp "d.doit2 ()" 44 -CompileExpression::add_imp "ap->doit2 ()" 44 -CompileExpression::add_imp "b.doit3 ()" -3 -CompileExpression::add_imp "c.doit3 ()" -3 -CompileExpression::add_imp "d.doit3 ()" -3 -CompileExpression::add_imp "foo.doit ()" 1111 -CompileExpression::add_imp "bar.doit2 ()" 2222 +CompileExpression::test "b.doit ()" 2 +CompileExpression::test "c.doit ()" 3 +CompileExpression::test "d.doit ()" 4 +CompileExpression::test "ap->doit ()" 4 +CompileExpression::test "b.doit2 ()" 22 +CompileExpression::test "c.doit2 ()" 33 +CompileExpression::test "d.doit2 ()" 44 +CompileExpression::test "ap->doit2 ()" 44 +CompileExpression::test "b.doit3 ()" -3 +CompileExpression::test "c.doit3 ()" -3 +CompileExpression::test "d.doit3 ()" -3 +CompileExpression::test "foo.doit ()" 1111 +CompileExpression::test "bar.doit2 ()" 2222 # These two tests are "disabled". They represent new/future features. -# CompileExpression::add_exp \ +# CompileExpression::test \ [concat "struct ABC {int doit2(void) { return 3333; }} abc;" \ "var = abc.doit2()"] \ - 3333 -# CompileExpression::add_exp \ + 3333 -explicit +# CompileExpression::test \ [concat "struct ABC : A {int doit2(void) { return 4444; }} abc;" \ "var = abc.doit2()"] \ - 4444 - -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" + 4444 -explicit # Test some error conditions gdb_test "compile code A a;" \ diff --git a/gdb/testsuite/gdb.compile/cp-special-function.exp b/gdb/testsuite/gdb.compile/cp-special-function.exp index d69d89c1ae4..26d4de5fbcf 100644 --- a/gdb/testsuite/gdb.compile/cp-special-function.exp +++ b/gdb/testsuite/gdb.compile/cp-special-function.exp @@ -44,215 +44,217 @@ gdb_continue_to_breakpoint "testing location" # Reminder, "var" is an integer; all these types get converted to `int'. CompileExpression::new "var" -CompileExpression::add_imp "a + 1" 2 -CompileExpression::add_imp "a + b" 3 -CompileExpression::add_imp "a + b + 3" 6 -CompileExpression::add_imp "1 + a + a" 3 -CompileExpression::add_imp "1 + b + 1" 4 -CompileExpression::add_imp "(+a).get ()" 11 -CompileExpression::add_imp "(+c).get ()" 7 -CompileExpression::add_imp "a + (+c).get ()" 8 - -CompileExpression::add_imp "a - 2" -1 -CompileExpression::add_imp "a - b" -1 -CompileExpression::add_imp "a - b - 3" -4 -CompileExpression::add_imp "2 - a - a" 0 -CompileExpression::add_imp "2 - b - 2" -2 -CompileExpression::add_imp "(-a).get ()" 21 -CompileExpression::add_imp "(-c).get ()" 17 -CompileExpression::add_imp "a - (-c).get ()" -16 - -CompileExpression::add_imp "a & 3" 1 -CompileExpression::add_imp "a & b" 0 -CompileExpression::add_imp "a & b & 3" 0 -CompileExpression::add_imp "3 & a & a" 1 -CompileExpression::add_imp "3 & b & 3" 2 -CompileExpression::add_imp "(&a).get ()" 31 -CompileExpression::add_imp "(&c).get ()" 27 -CompileExpression::add_imp "a & (&c).get ()" 1 - -CompileExpression::add_imp "a * 4" 4 -CompileExpression::add_imp "a * b" 2 -CompileExpression::add_imp "a * b * 4" 8 -CompileExpression::add_imp "4 * a * a" 4 -CompileExpression::add_imp "4 * b * 4" 32 -CompileExpression::add_imp "(*a).get ()" 41 -CompileExpression::add_imp "(*c).get ()" 37 -CompileExpression::add_imp "a * (*c).get ()" 37 - -CompileExpression::add_imp "(~a).get ()" -2 -CompileExpression::add_imp "(~b).get ()" -3 -CompileExpression::add_imp "(~c).get ()" 2 - -CompileExpression::add_imp "a / 1" 1 -CompileExpression::add_imp "10 / b" 5 -CompileExpression::add_imp "b / a" 2 -CompileExpression::add_imp "-3 / c / 1 / a" 1 - -CompileExpression::add_imp "a % 1" 0 -CompileExpression::add_imp "5 % c" 2 -CompileExpression::add_imp "a % c" 1 -CompileExpression::add_imp "-2 % c % b % 1" 0 - -CompileExpression::add_imp "a | 1" 1 -CompileExpression::add_imp "1 | b" 3 -CompileExpression::add_imp "b | c" -1 -CompileExpression::add_imp "1 | a | b | 4" 7 - -CompileExpression::add_imp "a ^ 1" 0 -CompileExpression::add_imp "1 ^ b" 3 -CompileExpression::add_imp "b ^ c" -1 -CompileExpression::add_imp "1 ^ a ^ b ^ 4" 6 +CompileExpression::test "a + 1" 2 +CompileExpression::test "a + b" 3 +CompileExpression::test "a + b + 3" 6 +CompileExpression::test "1 + a + a" 3 +CompileExpression::test "1 + b + 1" 4 +CompileExpression::test "(+a).get ()" 11 +CompileExpression::test "(+c).get ()" 7 +CompileExpression::test "a + (+c).get ()" 8 + +CompileExpression::test "a - 2" -1 +CompileExpression::test "a - b" -1 +CompileExpression::test "a - b - 3" -4 +CompileExpression::test "2 - a - a" 0 +CompileExpression::test "2 - b - 2" -2 +CompileExpression::test "(-a).get ()" 21 +CompileExpression::test "(-c).get ()" 17 +CompileExpression::test "a - (-c).get ()" -16 + +CompileExpression::test "a & 3" 1 +CompileExpression::test "a & b" 0 +CompileExpression::test "a & b & 3" 0 +CompileExpression::test "3 & a & a" 1 +CompileExpression::test "3 & b & 3" 2 +CompileExpression::test "(&a).get ()" 31 +CompileExpression::test "(&c).get ()" 27 +CompileExpression::test "a & (&c).get ()" 1 + +CompileExpression::test "a * 4" 4 +CompileExpression::test "a * b" 2 +CompileExpression::test "a * b * 4" 8 +CompileExpression::test "4 * a * a" 4 +CompileExpression::test "4 * b * 4" 32 +CompileExpression::test "(*a).get ()" 41 +CompileExpression::test "(*c).get ()" 37 +CompileExpression::test "a * (*c).get ()" 37 + +CompileExpression::test "(~a).get ()" -2 +CompileExpression::test "(~b).get ()" -3 +CompileExpression::test "(~c).get ()" 2 + +CompileExpression::test "a / 1" 1 +CompileExpression::test "10 / b" 5 +CompileExpression::test "b / a" 2 +CompileExpression::test "-3 / c / 1 / a" 1 + +CompileExpression::test "a % 1" 0 +CompileExpression::test "5 % c" 2 +CompileExpression::test "a % c" 1 +CompileExpression::test "-2 % c % b % 1" 0 + +CompileExpression::test "a | 1" 1 +CompileExpression::test "1 | b" 3 +CompileExpression::test "b | c" -1 +CompileExpression::test "1 | a | b | 4" 7 + +CompileExpression::test "a ^ 1" 0 +CompileExpression::test "1 ^ b" 3 +CompileExpression::test "b ^ c" -1 +CompileExpression::test "1 ^ a ^ b ^ 4" 6 # !!keiths: I don't know why this is failing... -CompileExpression::add_exp "d = b; var = d.get ();" 2 -CompileExpression::add_exp "d = 21; var = d.get ();" 21 -CompileExpression::add_exp "d = 0; var = d.get ();" 0 - -CompileExpression::add_exp "d.int_ = 1; var = d.get ()" 1 -CompileExpression::add_exp "d += a; var = d.get ();" 2 -CompileExpression::add_exp "d += 2; var = d.get ();" 4 - -CompileExpression::add_exp "d.int_ = 2; var = d.get ()" 2 -CompileExpression::add_exp "d -= a; var = d.get ();" 1 -CompileExpression::add_exp "d -= 2; var = d.get ();" -1 - -CompileExpression::add_exp "d.int_ = 3; var = d.get ()" 3 -CompileExpression::add_exp "d *= 2; var = d.get ()" 6 -CompileExpression::add_exp "d *= d; var = d.get ()" 36 - -CompileExpression::add_exp "d.int_ = 6; var = d.get ()" 6 -CompileExpression::add_exp "d /= 2; var = d.get ()" 3 -CompileExpression::add_exp "d /= d; var = d.get ()" 1 - -CompileExpression::add_exp "d.int_ = 4; var = d.get ()" 4 -CompileExpression::add_exp "d %= 3; var = d.get ()" 1 -CompileExpression::add_exp "d %= d; var = d.get ()" 0 - -CompileExpression::add_exp "d.int_ = 5; var = d.get ()" 5 -CompileExpression::add_exp "d &= 4; var = d.get ()" 4 -CompileExpression::add_exp "d &= a; var = d.get ()" 0 - -CompileExpression::add_exp "d.int_ = 8; var = d.get ()" 8 -CompileExpression::add_exp "d |= a; var = d.get ()" 9 -CompileExpression::add_exp "d |= 16; var = d.get ()" 25 - -CompileExpression::add_exp "d.int_ = 9; var = d.get ()" 9 -CompileExpression::add_exp "d ^= 2; var = d.get ()" 11 -CompileExpression::add_exp "d ^= d; var = d.get ()" 0 - -CompileExpression::add_imp "d.int_ = 10; var = d.get ()" 10 -CompileExpression::add_imp "d << 2" 40 -CompileExpression::add_imp "d << a" 20 -CompileExpression::add_imp "1 << b" 4 - -CompileExpression::add_imp "d.int_ = 12; var = d.get ()" 12 -CompileExpression::add_imp "d >> 2" 3 -CompileExpression::add_imp "d >> a" 6 -CompileExpression::add_imp "10 >> a" 5 - -CompileExpression::add_exp "d.int_ = 13; var = d.get ()" 13 -CompileExpression::add_exp "d <<= 2; var = d.get ()" 52 -CompileExpression::add_exp "d <<= a; var = d.get ()" 104 - -CompileExpression::add_exp "d.int_ = 14; var = d.get ()" 14 -CompileExpression::add_exp "d >>= 2; var = d.get ()" 3 -CompileExpression::add_exp "d >>= a; var = d.get ()" 1 - -CompileExpression::add_imp "d.int_ = 1013; var = d.get ()" 1013 -CompileExpression::add_imp "d == 2" 0 -CompileExpression::add_imp "d == d" 1 -CompileExpression::add_imp "1 == d" 0 - -CompileExpression::add_imp "d.int_ = 1014; var = d.get ()" 1014 -CompileExpression::add_imp "d != 2" 1 -CompileExpression::add_imp "d != d" 0 -CompileExpression::add_imp "1014 == d" 1 - -CompileExpression::add_imp "d.int_ = 15; var = d.get ()" 15 -CompileExpression::add_imp "d < 2" 0 -CompileExpression::add_imp "a < d" 1 -CompileExpression::add_imp "16 < d" 0 - -CompileExpression::add_imp "d.int_ = 16; var = d.get ()" 16 -CompileExpression::add_imp "d > 2" 1 -CompileExpression::add_imp "d < a" 0 -CompileExpression::add_imp "15 < d" 1 - -CompileExpression::add_imp "d.int_ = 17; var = d.get ()" 17 -CompileExpression::add_imp "d <= 2" 0 -CompileExpression::add_imp "a <= d" 1 -CompileExpression::add_imp "18 <= d" 0 - -CompileExpression::add_imp "d.int_ = 18; var = d.get ()" 18 -CompileExpression::add_imp "d >= 2" 1 -CompileExpression::add_imp "d <= a" 0 -CompileExpression::add_imp "15 <= d" 1 - -CompileExpression::add_imp "d.int_ = 19; var = d.get ()" 19 -CompileExpression::add_imp "!d" 0 - -CompileExpression::add_imp "d.int_ = 20; var = d.get ()" 20 -CompileExpression::add_imp "d && 0" 0 -CompileExpression::add_imp "d && a" 1 -CompileExpression::add_imp "0 && d" 0 - -CompileExpression::add_imp "d.int_ = 21; var = d.get ()" 21 -CompileExpression::add_imp "d || 0" 1 -CompileExpression::add_imp "d || a" 1 -CompileExpression::add_imp "0 || d" 1 - -CompileExpression::add_exp "d.int_ = 22; var = d.get ()" 22 -CompileExpression::add_imp "(d++).get ()" 22 -CompileExpression::add_imp "d.get ()" 23 "get value of post-incr d" -CompileExpression::add_imp "(++d).get ()" 24 - -CompileExpression::add_exp "d.int_ = 23; var = d.get ()" 23 -CompileExpression::add_imp "(d--).get ()" 23 -CompileExpression::add_imp "d.get ()" 22 "get value of post-decr d" -CompileExpression::add_imp "(--d).get ()" 21 - -CompileExpression::add_exp "d.int_ = 24; var = d.get ()" 24 -CompileExpression::add_imp "(a,d).get ()" 1 -CompileExpression::add_imp "(d,a).get ()" 24 - -CompileExpression::add_exp "d.int_ = 25; var = d.get ()" 25 -CompileExpression::add_imp "d->*3" 28 -CompileExpression::add_imp "d->*b" 27 "d->*b 1" - -CompileExpression::add_exp "d.int_ = 26; var = d.get ()" 26 -CompileExpression::add_imp "d->*4" 30 -CompileExpression::add_imp "d->*b" 28 "d->*b 2" - -CompileExpression::add_exp "d.pub_var = 1; var = d.pub_var" 1 -CompileExpression::add_imp "d->pub_var" -21 +CompileExpression::test "d = b; var = d.get ();" 2 -explicit +CompileExpression::test "d = 21; var = d.get ();" 21 -explicit +CompileExpression::test "d = 0; var = d.get ();" 0 -explicit + +CompileExpression::test "d.int_ = 1; var = d.get ()" 1 -explicit +CompileExpression::test "d += a; var = d.get ();" 2 -explicit +CompileExpression::test "d += 2; var = d.get ();" 4 -explicit + +CompileExpression::test "d.int_ = 2; var = d.get ()" 2 -explicit +CompileExpression::test "d -= a; var = d.get ();" 1 -explicit +CompileExpression::test "d -= 2; var = d.get ();" -1 -explicit + +CompileExpression::test "d.int_ = 3; var = d.get ()" 3 -explicit +CompileExpression::test "d *= 2; var = d.get ()" 6 -explicit +CompileExpression::test "d *= d; var = d.get ()" 36 -explicit + +CompileExpression::test "d.int_ = 6; var = d.get ()" 6 -explicit +CompileExpression::test "d /= 2; var = d.get ()" 3 -explicit +CompileExpression::test "d /= d; var = d.get ()" 1 -explicit + +CompileExpression::test "d.int_ = 4; var = d.get ()" 4 -explicit +CompileExpression::test "d %= 3; var = d.get ()" 1 -explicit +CompileExpression::test "d %= d; var = d.get ()" 0 -explicit + +CompileExpression::test "d.int_ = 5; var = d.get ()" 5 -explicit +CompileExpression::test "d &= 4; var = d.get ()" 4 -explicit +CompileExpression::test "d &= a; var = d.get ()" 0 -explicit + +CompileExpression::test "d.int_ = 8; var = d.get ()" 8 -explicit +CompileExpression::test "d |= a; var = d.get ()" 9 -explicit +CompileExpression::test "d |= 16; var = d.get ()" 25 -explicit + +CompileExpression::test "d.int_ = 9; var = d.get ()" 9 -explicit +CompileExpression::test "d ^= 2; var = d.get ()" 11 -explicit +CompileExpression::test "d ^= d; var = d.get ()" 0 -explicit + +CompileExpression::test "d.int_ = 10; var = d.get ()" 10 -explicit +CompileExpression::test "d << 2" 40 +CompileExpression::test "d << a" 20 +CompileExpression::test "1 << b" 4 + +CompileExpression::test "d.int_ = 12; var = d.get ()" 12 -explicit +CompileExpression::test "d >> 2" 3 +CompileExpression::test "d >> a" 6 +CompileExpression::test "10 >> a" 5 + +CompileExpression::test "d.int_ = 13; var = d.get ()" 13 -explicit +CompileExpression::test "d <<= 2; var = d.get ()" 52 -explicit +CompileExpression::test "d <<= a; var = d.get ()" 104 -explicit + +CompileExpression::test "d.int_ = 14; var = d.get ()" 14 -explicit +CompileExpression::test "d >>= 2; var = d.get ()" 3 -explicit +CompileExpression::test "d >>= a; var = d.get ()" 1 -explicit + +CompileExpression::test "d.int_ = 1013; var = d.get ()" 1013 -explicit +CompileExpression::test "d == 2" {(0|false)} +CompileExpression::test "d == d" {(1|true)} +CompileExpression::test "1 == d" {(0|false)} + +CompileExpression::test "d.int_ = 1014; var = d.get ()" 1014 -explicit +CompileExpression::test "d != 2" {(1|true)} +CompileExpression::test "d != d" {(0|false)} +CompileExpression::test "1014 == d" {(1|true)} + +CompileExpression::test "d.int_ = 15; var = d.get ()" 15 -explicit +CompileExpression::test "d < 2" {(0|false)} +CompileExpression::test "a < d" {(1|true)} +CompileExpression::test "16 < d" {(0|false)} + +CompileExpression::test "d.int_ = 16; var = d.get ()" 16 -explicit +CompileExpression::test "d > 2" {(1|true)} +CompileExpression::test "d < a" {(0|false)} +CompileExpression::test "15 < d" {(1|true)} + +CompileExpression::test "d.int_ = 17; var = d.get ()" 17 -explicit +CompileExpression::test "d <= 2" {(0|false)} +CompileExpression::test "a <= d" {(1|true)} +CompileExpression::test "18 <= d" {(0|false)} + +CompileExpression::test "d.int_ = 18; var = d.get ()" 18 -explicit +CompileExpression::test "d >= 2" {(1|true)} +CompileExpression::test "d <= a" {(0|false)} +CompileExpression::test "15 <= d" {(1|true)} + +CompileExpression::test "d.int_ = 19; var = d.get ()" 19 -explicit +CompileExpression::test "!d" {(0|false)} + +CompileExpression::test "d.int_ = 20; var = d.get ()" 20 -explicit +CompileExpression::test "d && 0" {(0|false)} +CompileExpression::test "d && a" {(1|true)} +CompileExpression::test "0 && d" {(0|false)} + +CompileExpression::test "d.int_ = 21; var = d.get ()" 21 -explicit +CompileExpression::test "d || 0" {(1|true)} +CompileExpression::test "d || a" {(1|true)} +CompileExpression::test "0 || d" {(1|true)} + +CompileExpression::test "d.int_ = 22; var = d.get ()" 22 -explicit +CompileExpression::test "(d++).get ()" 22 -noprint +CompileExpression::test "(d++).get ()" 23 -nocode +CompileExpression::test "d.get ()" 24 -name "get value of post-incr d" +CompileExpression::test "(++d).get ()" 25 -noprint +CompileExpression::test "(++d).get ()" 26 -nocode + +CompileExpression::test "d.int_ = 23; var = d.get ()" 23 -explicit +CompileExpression::test "(d--).get ()" 23 -noprint +CompileExpression::test "(d--).get ()" 22 -nocode +CompileExpression::test "d.get ()" 21 -name "get value of post-decr d" +CompileExpression::test "(--d).get ()" 20 -noprint +CompileExpression::test "(--d).get ()" 19 -nocode + +CompileExpression::test "d.int_ = 24; var = d.get ()" 24 -explicit +CompileExpression::test "(a,d).get ()" 1 +CompileExpression::test "(d,a).get ()" 24 + +CompileExpression::test "d.int_ = 25; var = d.get ()" 25 -explicit +CompileExpression::test "d->*3" 28 +CompileExpression::test "d->*b" 27 "d->*b 1" + +CompileExpression::test "d.int_ = 26; var = d.get ()" 26 -explicit +CompileExpression::test "d->*4" 30 +CompileExpression::test "d->*b" 28 "d->*b 2" + +CompileExpression::test "d.pub_var = 1; var = d.pub_var" 1 -explicit +CompileExpression::test "d->pub_var" -21 # "'d' cannot be used as function" - CompileExpression::add_exp "d.int_ = 27; var = d.get ()" 27 - CompileExpression::add_imp "d ()" -27 - CompileExpression::add_imp "d (3)" 30 - CompileExpression::add_imp "a (b)" 3 + CompileExpression::test "d.int_ = 27; var = d.get ()" 27 -explicit + CompileExpression::test "d ()" -27 + CompileExpression::test "d (3)" 30 + CompileExpression::test "a (b)" 3 -CompileExpression::add_exp "d.int_ = 28; var = d.get ()" 28 -CompileExpression::add_imp "d\[10\]" 18 -CompileExpression::add_imp "d\[b\]" 26 +CompileExpression::test "d.int_ = 28; var = d.get ()" 28 -explicit +CompileExpression::test "d\[10\]" 18 +CompileExpression::test "d\[b\]" 26 # "unable to find XYZ literal operator 'operator""_MI'" - CompileExpression::add_imp "10_MI" 100 - CompileExpression::add_imp "'c'_MI" 200 - CompileExpression::add_imp "\"foo\"_MI" 300 + CompileExpression::test "10_MI" 100 + CompileExpression::test "'c'_MI" 200 + CompileExpression::test "\"foo\"_MI" 300 # crash - CompileExpression::add_exp \ - "MyInteger *myint_ptr = new MyInteger (1); var = myint_ptr->pub_var" 1234 + CompileExpression::test \ + "MyInteger *myint_ptr = new MyInteger (1); var = myint_ptr->pub_var" \ + 1234 -explicit -CompileExpression::add_exp "d.int_ = 29; var = d.int_" 29 -CompileExpression::add_exp "ch = d; var = ch;" 29 -CompileExpression::add_exp "char a_char = d; var = a_char - 9" 20 +CompileExpression::test "d.int_ = 29; var = d.int_" 29 -explicit +CompileExpression::test "ch = d; var = ch;" 29 -explicit +CompileExpression::test "char a_char = d; var = a_char - 9" 20 -explicit -CompileExpression::add_exp "d.int_ = 30; var = d.int_" 30 -CompileExpression::add_imp "d" -30 -CompileExpression::add_exp "int integer = d; var = integer - 10" -40 - -CompileExpression::run_tests "code" -#CompileExpression::run_tests "print" +CompileExpression::test "d.int_ = 30; var = d.int_" 30 -explicit +CompileExpression::test "d" {(-30|{pub_var = 1, int_ = 30})} +CompileExpression::test "int integer = d; var = integer - 10" -40 -explicit diff --git a/gdb/testsuite/lib/compiler-support.exp b/gdb/testsuite/lib/compiler-support.exp index 97d0b5fc9ee..935ea5522f6 100644 --- a/gdb/testsuite/lib/compiler-support.exp +++ b/gdb/testsuite/lib/compiler-support.exp @@ -46,46 +46,51 @@ proc skip_compile_feature_tests {} { # "compile code" expressions. # CompileExpression::new "var" # -# Add the expression "foo;" with result/value 3. -# CompileExpression::add_imp "foo;" 3 -# -# Add the expression "a = function (3); var = a;" with the result 21. -# CompileExpression::add_exp "a = function (3); var = a;" 21 -# -# Run tests using "compile print". -# CompileExpression::run_tests "print" +# Test the implicit expression "foo;" with result/value 3. +# CompileExpression::test "foo;" 3 # ---> Runs the following tests (name of tests ignored for illustration) +# gdb_test_no_output "compile code var = foo;" +# gdb_test "p var" "= 3" # gdb_test "compile print foo;" "= 3" -# # "explicit" expressions are ignored # -# Run the tests using "compile code". -# CompileExpression::run_tests "code" +# Test the explicit expression "a = function (3); var = a;" with the result 21. +# CompileExpression::test "a = function (3); var = a;" 21 -explicit # ---> Runs the following tests (name of tests ignored for illustration) -# gdb_test_no_output "compile code var = foo;" -# gdb_test "p var" "= 3" -# gdb_test_no_output "compoile code a = function (3); var = a;" +# gdb_test_no_output "compile code a = function (3); var = a;" # gdb_test "p var" "= 21" # -# Additional option flags that may be passed to add_mp or add_exp: +# Additional option flags may be passed to test to control the behavior +# of the test harness: +# +# Pass -explicit to specify that the test uses an explicit expression, +# one which sets the value of the variable (see above). Only the code test +# will be run. +# +# Otherwise, all expressions are considered implicit. +# # Pass -value, -compile, and/or -print to indicate that the value, -# compile, or print steps will optionally fail. Specify -xfail or -# -kfail to indicate how each particular step will fail. These may be +# compile, or print steps will optionally fail. Specify "xfail" or +# "kfail" to indicate how each particular step will fail. These may be # followed by any accepted DejaGNU parameters such as architecture and # bug#. # -# -compile and -value are used when "code" tests are run, the former +# -compile and -value are used when a "code" test is run, the former # specifying that the "compile code" command (to GDB) will fail or pass # in the prescribed manner. -value indicates that the "print $VARIABLE" # command (to GDB) will fail in the prescribed manner. # # -print is used to specify that an expression will fail in the presribed -# manner when "print" tests are run. +# manner when "print" test is executed. # # Pass "-name NAME" to set an optional test name. If not specified, # the harness will use test names such as "compile code EXPR" and # "result of compile code EXPR". # -# These options must be passed LAST to the add_imp/add_exp. +# Pass "-noprint" or "-nocode" to suppress print or code tests, respectively, +# This is useful when the expression being tested modifies the object +# being tested, e.g., "a++". +# +# These options must be passed LAST to CompileExpression::test. # # Examples: # @@ -103,103 +108,79 @@ namespace eval ::CompileExpression { # must be in scope when tests are run. variable varName_ {} - # A list containing all the expressions to test. - # The format is EXPR RESULT IS_EXPLICIT TEST_NAME OPT_FAIL_LIST - variable expr_list_ {} - # Start a new expression list. VARNAME is the name of the variable # that will be printed to check if the result of the test was # successful. proc new {varname} { variable varName_ - variable expr_list_ set varName_ $varname - set expr_list_ {} } - # Add an "implicit" expression to the list of tests to run. + # Test an expression. + # + # See the preamble for a list of valid optional arguments. # # Implicit expressions will be sent to GDB in the form # "$varName = $EXP". "p $varName" will be used to decide the pass # or fail status of the test. # - # The name of the test may be optionally specified. + # Explicit expressions will be sent to GDB as-is and tested using only + # "compile code". The expression should set the value of the variable + # $varName, which is then printed to determine whether the test passed + # or failed. # - # Unlike explicit expressions, implicit expressions may be tested - # with both "compile print" and "compile code". + # Unlike explicit expressions, implicit expressions are tested with both + # "compile print" and "compile code". - proc add_imp {exp result {tst ""} args} { - variable expr_list_ + proc test {exp result args} { + parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""} + {noprint} {nocode} {explicit}} - parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""}} - lappend expr_list_ [list $exp $result 0 $name \ - [list $compile $value $print]] - } - - # Add an "explicit" expression to the list of tests to run. - # - # Explicit expressions will be sent to GDB as-is. The expression - # should set the value of the variable $varName, which is then printed - # to determine whether the test passed or failed. - # - # The name of the test may be optionally specified. - # - # Unlike implicit expressions, explicit expressions cannot be tested - # with "compile print." If run_tests is called with "print", any - # explicit expressions in the expression list will be ignored. - - proc add_exp {exp result args} { - variable expr_list_ - - parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""}} - lappend expr_list_ [list $exp $result 1 $name \ - [list $compile $value $print]] + if {!$nocode} { + do_test_ code $exp $result $explicit $name \ + [list $compile $value $print] + } + if {!$noprint} { + do_test_ print $exp $result $explicit $name \ + [list $compile $value $print] + } } - # Run compile tests for CMD ("print" or "code"). + # Run a compile test for CMD ("print" or "code"). - proc run_tests {cmd} { + proc do_test_ {cmd exp result is_explicit tst fail_list} { variable varName_ - variable expr_list_ if {![string match $cmd "code"] && ![string match $cmd "print"]} { error "invalid command, $cmd; should be \"print\" or \"compile\"" } - foreach exp_test $expr_list_ { - set exp [lindex $exp_test 0] - set result [lindex $exp_test 1] - set is_explicit [lindex $exp_test 2] - set tst [lindex $exp_test 3] - set fail_list [lindex $exp_test 4] + # Get expected result of test. Will be "" if test is + # expected to PASS. + lassign $fail_list fail_compile fail_value fail_print - # Get expected result of test. Will be "" if test is - # expected to PASS. - lassign $fail_list fail_compile fail_value fail_print + # Set a test name if one hasn't been provided. + if {$tst == ""} { + set tst "compile $cmd $exp" + } - # Set a test name if one hasn't been provided. - if {$tst == ""} { - set tst "compile $cmd $exp" + if {[string match $cmd "print"]} { + if {!$is_explicit} { + eval setup_failures_ $fail_print + gdb_test "compile print $exp" $result $tst } - - if {[string match $cmd "print"]} { - if {!$is_explicit} { - eval setup_failures_ $fail_print - gdb_test "compile print $exp" $result $tst - } + } else { + if {$is_explicit} { + set command "compile code $exp" } else { - if {$is_explicit} { - set command "compile code $exp" - } else { - set command "compile code $varName_ = $exp" - } - eval setup_failures_ $fail_compile - gdb_test_no_output $command $tst - eval setup_failures_ $fail_value - gdb_test "p $varName_" "= $result" "result of $tst" + set command "compile code $varName_ = $exp" } + eval setup_failures_ $fail_compile + gdb_test_no_output $command $tst + eval setup_failures_ $fail_value + gdb_test "p $varName_" "= $result" "result of $tst" } }