diff options
Diffstat (limited to 'gdb/testsuite/gdb.cp/virtfunc.exp')
-rw-r--r-- | gdb/testsuite/gdb.cp/virtfunc.exp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cp/virtfunc.exp b/gdb/testsuite/gdb.cp/virtfunc.exp index dd41c6dd98..15a374ca1a 100644 --- a/gdb/testsuite/gdb.cp/virtfunc.exp +++ b/gdb/testsuite/gdb.cp/virtfunc.exp @@ -226,6 +226,54 @@ proc test_virtual_calls {} { } } +# A helper proc that creates a regular expression matching a +# particular vtable. NAME is the type name. Each element of ARGS is +# the name of a function in the vtable. + +proc make_one_vtable_result {name args} { + global hex + + set nls "\[\r\n\]+" + + set result "vtable for '${name}' @ $hex .subobject @ $hex.:$nls" + set count 0 + foreach func $args { + append result ".${count}.: $hex <$func..>${nls}" + incr count + } + + return $result +} + +# Test "info vtbl". + +proc test_info_vtbl {} { + global hex + + set nls "\[\r\n\]+" + + set vt_A [make_one_vtable_result A A::f] + set vt_B [make_one_vtable_result B B::f] + set vt_V [make_one_vtable_result V VB::vvb V::vv] + set vt_V2 [make_one_vtable_result V VB::vvb "virtual thunk to E::vv"] + set vt_D [make_one_vtable_result D D::vg D::vd] + set vt_D2 [make_one_vtable_result D "non-virtual thunk to E::vg" D::vd] + set vt_E [make_one_vtable_result E E::f E::vg E::vv] + + gdb_test "info vtbl a" "${vt_A}${vt_V}" + gdb_test "info vtbl b" "${vt_B}${vt_V}" + gdb_test "info vtbl c" "${vt_V}" + gdb_test "info vtbl d" "${vt_D}${vt_V}" + gdb_test "info vtbl e" "${vt_E}${vt_D2}${vt_V2}" + gdb_test "info vtbl pEe" "${vt_E}${vt_D2}${vt_V2}" + + gdb_test "info vtbl" "Argument required.*" + gdb_test "info vtbl va" \ + "This object does not have a virtual function table.*" + gdb_test "info vtbl all_count" \ + "This object does not have a virtual function table.*" +} + proc do_tests {} { global srcdir subdir binfile global gdb_prompt @@ -244,6 +292,7 @@ proc do_tests {} { return } test_ptype_of_classes + test_info_vtbl gdb_breakpoint test_calls gdb_test "continue" ".*Breakpoint .* test_calls.*" "" |