1 # Copyright 2013-2024 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 require allow_cplus_tests
20 if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
24 proc do_typeid_tests {started} {
27 # We might see the standard type or gdb's internal type.
28 set type_re "(std::type_info|gdb_gnu_v3_type_info)"
31 if {$started || ![test_compiler_info clang-*-* c++]} {
32 # Clang doesn't place type information for the base types in
33 # the executable, and relies on this being linked in from the
34 # standard library. As a result, type information for these
35 # variables is only available once the inferior is started.
39 foreach simple_var $var {
40 gdb_test "print &typeid($simple_var)" \
41 " = \\($type_re \\*\\) $hex.*"
43 # Note that we test pointer equality rather than object
44 # equality here. That is because std::type_info's operator==
45 # is not present in the libstdc++ .so.
46 gdb_test "print &typeid($simple_var) == &typeid(typeof($simple_var))" \
50 # typeid for these is Derived. Don't try these tests until the
51 # inferior has started.
53 foreach der_var {*b *vb1 *vb2 *bv d {const Derived} {const Derived &}} {
54 gdb_test "print &typeid($der_var)" \
55 " = \\($type_re \\*\\) $hex.*"
56 gdb_test "print &typeid($der_var) == &typeid(d)" \
62 with_test_prefix "before starting" {
70 with_test_prefix "after starting" {