2014-12-01 Luis Machado gdb/testsuite * gdb.cp/typeid.exp (do_typeid_tests): Do not test type id printing unless the symbols are available. diff --git a/gdb/testsuite/gdb.cp/typeid.exp b/gdb/testsuite/gdb.cp/typeid.exp index 9963a8a..7469b2b 100644 --- a/gdb/testsuite/gdb.cp/typeid.exp +++ b/gdb/testsuite/gdb.cp/typeid.exp @@ -25,20 +25,35 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} { proc do_typeid_tests {started} { global hex + global gdb_prompt + set symbol_found 1 - # We might see the standard type or gdb's internal type. - set type_re "(std::type_info|struct gdb_gnu_v3_type_info)" + # Try to access one of the symbols to make sure it is available. Some + # architectures put the symbols on relocatable sections, which means + # they will not be accessible before the inferior is running. + send_gdb "print 'typeinfo for int'\n" + gdb_expect { + -re "No symbol \"typeinfo for int\" in current context.*$gdb_prompt" { + set symbol_found 0 + } + -re ".*$gdb_prompt" { + } + } + if {$symbol_found == 1} { + # We might see the standard type or gdb's internal type. + set type_re "(std::type_info|struct gdb_gnu_v3_type_info)" - foreach simple_var {i cp ccp ca b} { - gdb_test "print &typeid($simple_var)" \ - " = \\($type_re \\*\\) $hex.*" + foreach simple_var {i cp ccp ca b} { + gdb_test "print &typeid($simple_var)" \ + " = \\($type_re \\*\\) $hex.*" - # Note that we test pointer equality rather than object - # equality here. That is because std::type_info's operator== - # is not present in the libstdc++ .so. - gdb_test "print &typeid($simple_var) == &typeid(typeof($simple_var))" \ - " = true" + # Note that we test pointer equality rather than object + # equality here. That is because std::type_info's operator== + # is not present in the libstdc++ .so. + gdb_test "print &typeid($simple_var) == &typeid(typeof($simple_var))" \ + " = true" + } } # typeid for these is Derived. Don't try these tests until the