Add translations for various sub-directories
[binutils-gdb.git] / gdb / testsuite / gdb.cp / typeid.exp
blob3ba82f6f001eed8467161b509a649a08315409c6
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/>.
16 standard_testfile .cc
18 require allow_cplus_tests
20 if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
21     return -1
24 proc do_typeid_tests {started} {
25     global hex
27     # We might see the standard type or gdb's internal type.
28     set type_re "(std::type_info|gdb_gnu_v3_type_info)"
30     set var {ca b}
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.
36         lappend var i cp ccp
37     }
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))" \
47             " = true"
48     }
50     # typeid for these is Derived.  Don't try these tests until the
51     # inferior has started.
52     if {$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)" \
57                 " = true"
58         }
59     }
62 with_test_prefix "before starting" {
63     do_typeid_tests 0
66 if ![runto_main] {
67     return -1
70 with_test_prefix "after starting" {
71     do_typeid_tests 1