From: Vladimir Prus Date: Fri, 8 Dec 2006 14:29:02 +0000 (+0000) Subject: 2006-12-08 Vladimir Prus X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=038224f6186b569d849c7416159bde789749094a;p=binutils-gdb.git 2006-12-08 Vladimir Prus Test for base in references. * gdb.mi/mi-var-cp.cc: Add test code. * gdb.mi/mi-var-cp.exp: Test for bases in references. * gdb.mi/mi-watch.exp: Adjust to mi_runto changes. * gdb.mi/mi2-watch.exp: Likewise. * lib/mi-support.exp (mi_runto): Use temporary breakpoint. (mi_list_varobj_children): New function. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index d1f91e55273..559c54482d5 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2006-12-08 Vladimir Prus + + Test for base in references. + * gdb.mi/mi-var-cp.cc: Add test code. + * gdb.mi/mi-var-cp.exp: Test for bases in references. + * gdb.mi/mi-watch.exp: Adjust to mi_runto changes. + * gdb.mi/mi2-watch.exp: Likewise. + * lib/mi-support.exp (mi_runto): Use temporary breakpoint. + (mi_list_varobj_children): New function. + 2006-12-08 Vladimir Prus * lib/mi-support.exp diff --git a/gdb/testsuite/gdb.mi/mi-var-cp.cc b/gdb/testsuite/gdb.mi/mi-var-cp.cc index 23390f90389..6027051edcb 100644 --- a/gdb/testsuite/gdb.mi/mi-var-cp.cc +++ b/gdb/testsuite/gdb.mi/mi-var-cp.cc @@ -23,8 +23,26 @@ void reference_update_tests () x = 567; } +struct S { int i; int j; }; +struct S2 : S {}; + +int base_in_reference_test (S2& s2) +{ + return s2.i; +} + +void base_in_reference_test_main () +{ + S2 s; + s.i = 67; + s.j = 89; + base_in_reference_test (s); +} + + int main () { reference_update_tests (); + base_in_reference_test_main (); return 0; } diff --git a/gdb/testsuite/gdb.mi/mi-var-cp.exp b/gdb/testsuite/gdb.mi/mi-var-cp.exp index ea9d3de8bc9..fea145fbbfa 100644 --- a/gdb/testsuite/gdb.mi/mi-var-cp.exp +++ b/gdb/testsuite/gdb.mi/mi-var-cp.exp @@ -41,7 +41,6 @@ mi_gdb_load ${binfile} # Test that children of classes are properly reported -# Run to main mi_runto reference_update_tests mi_create_varobj "RX" "rx" "create varobj for rx" @@ -69,5 +68,24 @@ mi_next_to "reference_update_tests" {} ".*${srcfile}" [expr $x_assignment+2] \ mi_varobj_update RX {} "update RX (3)" +mi_runto base_in_reference_test + +mi_create_varobj "S2" "s2" "create varobj for s2" + +mi_list_varobj_children "S2" {{"S2.S" "S" "1" "S"}} "list children of s2" + +mi_list_varobj_children "S2.S" {{"S2.S.public" "public" "2"}} \ + "list children of s2.s" + +mi_list_varobj_children "S2.S.public"\ +{ + {"S2.S.public.i" "i" "0" "int"} + {"S2.S.public.j" "j" "0" "int"} +} "list children of s2.s.public" + +mi_check_varobj_value "S2.S.public.i" "67" "check S2.S.public.i" +mi_check_varobj_value "S2.S.public.j" "89" "check S2.S.public.j" + + mi_gdb_exit return 0 diff --git a/gdb/testsuite/gdb.mi/mi-watch.exp b/gdb/testsuite/gdb.mi/mi-watch.exp index a6d243b25c2..9d1cfa66917 100644 --- a/gdb/testsuite/gdb.mi/mi-watch.exp +++ b/gdb/testsuite/gdb.mi/mi-watch.exp @@ -64,7 +64,7 @@ proc test_watchpoint_creation_and_listing {} { "break-watch operation" mi_gdb_test "222-break-list" \ - "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=\"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*colhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"callee4\",file=\".*basics.c\",line=\"$line_callee4_body\",times=\"1\"\},bkpt=\{number=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",addr=\"\",what=\"C\",times=\"0\"\}\\\]\}" \ + "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=\"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*colhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{number=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",addr=\"\",what=\"C\",times=\"0\"\}\\\]\}" \ "list of watchpoints" } diff --git a/gdb/testsuite/gdb.mi/mi2-watch.exp b/gdb/testsuite/gdb.mi/mi2-watch.exp index 5cb0b32fe99..40088ae7c9c 100644 --- a/gdb/testsuite/gdb.mi/mi2-watch.exp +++ b/gdb/testsuite/gdb.mi/mi2-watch.exp @@ -63,7 +63,7 @@ proc test_watchpoint_creation_and_listing {} { "break-watch operation" mi_gdb_test "222-break-list" \ - "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=\"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*colhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"callee4\",file=\".*basics.c\",line=\"$line_callee4_body\",times=\"1\"\},bkpt=\{number=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",addr=\"\",what=\"C\",times=\"0\"\}\\\]\}" \ + "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=\"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*colhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{number=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",addr=\"\",what=\"C\",times=\"0\"\}\\\]\}" \ "list of watchpoints" } diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp index af3feefa741..75f40394a55 100644 --- a/gdb/testsuite/lib/mi-support.exp +++ b/gdb/testsuite/lib/mi-support.exp @@ -868,8 +868,8 @@ proc mi_runto {func} { global hex decimal fullname_syntax set test "mi runto $func" - mi_gdb_test "200-break-insert $func" \ - "200\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"$func\(\\\(.*\\\)\)?\",file=\".*\",line=\"\[0-9\]*\",times=\"0\"\}" \ + mi_gdb_test "200-break-insert -t $func" \ + "200\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=\"$hex\",func=\"$func\(\\\(.*\\\)\)?\",file=\".*\",line=\"\[0-9\]*\",times=\"0\"\}" \ "breakpoint at $func" if {![regexp {number="[0-9]+"} $expect_out(buffer) str] @@ -879,7 +879,7 @@ proc mi_runto {func} { mi_run_cmd gdb_expect { - -re ".*000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"$bkptno\",thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=\(\\\[.*\\\]\|\{.*\}\),file=\".*\",fullname=\"${fullname_syntax}.*\",line=\"\[0-9\]*\"\}\r\n$mi_gdb_prompt$" { + -re ".*000\\*stopped,thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=\(\\\[.*\\\]\|\{.*\}\),file=\".*\",fullname=\"${fullname_syntax}.*\",line=\"\[0-9\]*\"\}\r\n$mi_gdb_prompt$" { pass "$test" return 0 } @@ -1034,3 +1034,49 @@ proc mi_check_varobj_value { name value testname } { "\\^done,value=\"$value\"" \ $testname } + +# Check the results of the: +# +# -var-list-children VARNAME +# +# command. The CHILDREN parement should be a list of lists. +# Each inner list can have either 3 or 4 elements, describing +# fields that gdb is expected to report for child variable object, +# in the following order +# +# - Name +# - Expression +# - Number of children +# - Type +# +# If inner list has 3 elements, the gdb is expected to output no +# type for a child. +# +proc mi_list_varobj_children { varname children testname } { + + set numchildren [llength $children] + set children_exp {} + set whatever "\"\[^\"\]+\"" + + foreach item $children { + + set name [lindex $item 0] + set exp [lindex $item 1] + set numchild [lindex $item 2] + if {[llength $item] == 4} { + set type [lindex $item 3] + + lappend children_exp\ + "child={name=\"$name\",exp=\"$exp\",numchild=\"$numchild\",type=\"$type\"}" + } else { + lappend children_exp\ + "child={name=\"$name\",exp=\"$exp\",numchild=\"$numchild\"}" + } + } + set children_exp_j [join $children_exp ","] + set expected "\\^done,numchild=\"$numchildren\",children=\\\[$children_exp_j\\\]" + + verbose -log "Expecting: $expected" + + mi_gdb_test "-var-list-children $varname" $expected $testname +}