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 <vladimir@codesourcery.com>
+
+ 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 <vladimir@codesourcery.com>
* lib/mi-support.exp
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;
}
# 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"
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
"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"
}
"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"
}
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]
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
}
"\\^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
+}