mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
9704b8b4bc
It is not necessary to call get_compiler_info before calling test_compiler_info, and, after recent commits that removed setting up the gcc_compiled, true, and false globals from get_compiler_info, there is now no longer any need for any test script to call get_compiler_info directly. As a result every call to get_compiler_info outside of lib/gdb.exp is redundant, and this commit removes them all. There should be no change in what is tested after this commit.
117 lines
4.0 KiB
Plaintext
117 lines
4.0 KiB
Plaintext
# Copyright 2003-2022 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# This file is part of the gdb testsuite.
|
|
|
|
# This contains tests for GDB's use of RTTI information. This stems
|
|
# from a bug reported in PR gdb/488 and other places, which leads to
|
|
# statements like 'warning: can't find class named 'C::D', as given by
|
|
# C++ RTTI'. It arises from GDB not knowing about classes that are
|
|
# defined in namespaces.
|
|
|
|
# NOTE: carlton/2003-05-16: I suspect it could arise from nested class
|
|
# issues, too, and even once we fix that, there might be situations
|
|
# (involving templates, in particular) where this problem triggers
|
|
# because GDB and GCC have different ideas what a class is called.
|
|
|
|
if { [skip_cplus_tests] } { return }
|
|
|
|
#
|
|
# test running programs
|
|
#
|
|
|
|
standard_testfile rtti1.cc rtti2.cc
|
|
|
|
if {[prepare_for_testing "failed to prepare" $testfile \
|
|
[list $srcfile $srcfile2] {debug c++}]} {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] then {
|
|
perror "couldn't run to breakpoint"
|
|
return
|
|
}
|
|
|
|
# First, run to after we've constructed the object:
|
|
|
|
gdb_breakpoint [gdb_get_line_number "main-constructs-done" "$srcfile"]
|
|
gdb_continue_to_breakpoint "end of constructors in main"
|
|
|
|
gdb_test_multiple "print *e1" "print *e1" {
|
|
-re "warning: RTTI symbol not found for class 'n1::D1'.*$gdb_prompt $" {
|
|
# gdb HEAD 2003-12-05
|
|
kfail "gdb/488" "print *e1"
|
|
}
|
|
-re "warning: can't find class named `n1::D1', as given by C\\+\\+ RTTI.*$gdb_prompt $" {
|
|
# gdb 6.0
|
|
kfail "gdb/488" "print *e1"
|
|
}
|
|
-re "\\$\[0-9\]* = {<n1::Base1> = .*}\r\n$gdb_prompt $" {
|
|
pass "print *e1"
|
|
}
|
|
-re "\\$\[0-9\]* = {<Base1> = .*}\r\n$gdb_prompt $" {
|
|
# NOTE: carlton/2003-05-16: If code is compiled by GCC2, we
|
|
# don't print the warning (for no particular reason), but we
|
|
# still call the class via the wrong name; PR gdb/57 is our
|
|
# catch-all PR for nested type problems.
|
|
kfail "gdb/57" "print *e1"
|
|
}
|
|
}
|
|
|
|
# NOTE: carlton/2004-01-14: This test with an "<incomplete type>"
|
|
# message because, within rtt1.cc, GDB has no way of knowing that the
|
|
# class is called 'n2::D2' instead of just 'D2'. This is an artifical
|
|
# test case, though: if we were using these classes in a more
|
|
# substantial way, G++ would emit more debug info. As is, I don't
|
|
# think there's anything that GDB can do about this case until G++
|
|
# starts emitting DW_TAG_namespace info; this should arrive with GCC
|
|
# 3.4.
|
|
|
|
gdb_test_multiple "print *e2" "print *e2" {
|
|
-re "warning: RTTI symbol not found for class 'n2::D2'.*$gdb_prompt $" {
|
|
# gdb HEAD 2003-12-05
|
|
kfail "gdb/488" "print *e2"
|
|
}
|
|
-re "warning: can't find class named `n2::D2', as given by C\\+\\+ RTTI.*$gdb_prompt $" {
|
|
# gdb 6.0
|
|
kfail "gdb/488" "print *e2"
|
|
}
|
|
-re "\\$\[0-9\]* = <incomplete type>\r\n$gdb_prompt $" {
|
|
kfail "gdb/1511" "print *e2"
|
|
}
|
|
-re "\\$\[0-9\]* = {<n2::Base2> = .*}\r\n$gdb_prompt $" {
|
|
pass "print *e2"
|
|
}
|
|
-re "\\$\[0-9\]* = {<Base2> = .*}\r\n$gdb_prompt $" {
|
|
kfail "gdb/57" "print *e2"
|
|
}
|
|
}
|
|
|
|
# Now we test the hack that's been implemented to get around some
|
|
# instances of PR gdb/1511.
|
|
|
|
gdb_breakpoint [gdb_get_line_number "func-constructs-done" "$srcfile"]
|
|
gdb_continue_to_breakpoint "end of constructors in func"
|
|
|
|
gdb_test "print *obj" "\\$\[0-9\]* = {<n2::Base2> = .*}"
|
|
|
|
gdb_breakpoint [gdb_get_line_number "func3-constructs-done" "$srcfile"]
|
|
gdb_continue_to_breakpoint "end of constructors in func3"
|
|
|
|
gdb_test "print *obj3" "\\$\[0-9\]* = {<n2::C2> = .*}"
|
|
|
|
gdb_exit
|
|
return 0
|