5624293aaa
gdb.c++/userdef.exp: If GDB fails to restore the selected frame after an inferior function call, report the failure, but allow the test to continue.
400 lines
14 KiB
Text
400 lines
14 KiB
Text
# Copyright 1998, 1999, 2000, 2001, 2002, 2003 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 2 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, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@prep.ai.mit.edu
|
|
|
|
# written by Elena Zannoni (ezannoni@cygnus.com)
|
|
|
|
# This file is part of the gdb testsuite
|
|
#
|
|
# tests for overloaded member functions. Command Line calls
|
|
#
|
|
|
|
|
|
if $tracelevel then {
|
|
strace $tracelevel
|
|
}
|
|
|
|
#
|
|
# test running programs
|
|
#
|
|
set prms_id 0
|
|
set bug_id 0
|
|
|
|
if { [skip_cplus_tests] } { continue }
|
|
|
|
set testfile "overload"
|
|
set srcfile ${testfile}.cc
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
|
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
|
|
}
|
|
|
|
if [get_compiler_info ${binfile} "c++"] {
|
|
return -1
|
|
}
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
# set it up at a breakpoint so we can play with the variable values
|
|
#
|
|
if ![runto_main] then {
|
|
perror "couldn't run to breakpoint"
|
|
continue
|
|
}
|
|
|
|
if ![runto 'marker1'] then {
|
|
perror "couldn't run to marker1"
|
|
continue
|
|
}
|
|
|
|
gdb_test "up" ".*main.*" "up from marker1"
|
|
|
|
send_gdb "print foo_instance1\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = \{ifoo = 111, ccpfoo = 0x0\}\r\n$gdb_prompt $" {
|
|
pass "print foo_instance1"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print foo_instance1" }
|
|
timeout { fail "(timeout) print foo_instance1" }
|
|
}
|
|
|
|
|
|
setup_xfail "hppa*-*-*" CLLbs16901
|
|
send_gdb "ptype foo_instance1\n"
|
|
gdb_expect {
|
|
-re "type = class foo \{.*public:.*int ifoo;.*const char \\*ccpfoo;.*foo\\(int\\);.*foo\\(int, (const char|char const) \\*\\);.*foo\\(foo &\\);.*~foo\\(void\\);.*void foofunc\\(int\\);.*void foofunc\\(int, signed char \\*\\);.*int overload1arg\\(void\\);.*int overload1arg\\(char\\);.*int overload1arg\\(signed char\\);.*int overload1arg\\(unsigned char\\);.*int overload1arg\\(short\\);.*int overload1arg\\(unsigned short\\);.*int overload1arg\\(int\\);.*int overload1arg\\(unsigned int\\);.*int overload1arg\\(long\\);.*int overload1arg\\(unsigned long\\);.*int overload1arg\\(float\\);.*int overload1arg\\(double\\);.*int overloadargs\\(int\\);.*int overloadargs\\(int, int\\);.*int overloadargs\\(int, int, int\\);.*int overloadargs\\(int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int, int, int, int, int\\);.*int overloadargs\\(int, int, int, int, int, int, int, int, int, int, int\\);\r\n\}\r\n$gdb_prompt $" {
|
|
pass "ptype foo_instance1 (HP aCC -- known quirk with ~foo parameter list)"
|
|
}
|
|
-re "type = class foo .*int overloadargs\\(int, int, int, int, int, int, int, int, int, int, int\\);\r\n\}\r\n$gdb_prompt $" {
|
|
pass "ptype foo_instance1 (shorter match)"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "ptype foo_instance1" }
|
|
timeout { fail "(timeout) ptype foo_instance1" }
|
|
}
|
|
|
|
send_gdb "print foo_instance2\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = \{ifoo = 222, ccpfoo = $hex \"A\"\}\r\n$gdb_prompt $" {
|
|
pass "print foo_instance2"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print foo_instance2" }
|
|
timeout { fail "(timeout) print foo_instance2" }
|
|
}
|
|
|
|
send_gdb "print foo_instance3\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = \{ifoo = 222, ccpfoo = $hex \"A\"\}\r\n$gdb_prompt $" {
|
|
pass "print foo_instance3"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print foo_instance3" }
|
|
timeout { fail "(timeout) print foo_instance3" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 1\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 1 arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 1 arg" }
|
|
timeout { fail "(timeout) print call overloaded func 1 arg" }
|
|
}
|
|
|
|
|
|
# If GDB fails to restore the selected frame properly after the
|
|
# inferior function call above (see GDB PR 1155 for an explanation of
|
|
# why this might happen), all the subsequent tests will fail. We
|
|
# should detect and report that failure, but let the marker call
|
|
# finish so that the rest of the tests can run undisturbed.
|
|
gdb_test_multiple "frame" "re-selected 'main' frame after inferior call" {
|
|
-re "#0 marker1.*$gdb_prompt $" {
|
|
setup_kfail "gdb/1155" s390-*-linux-gnu
|
|
fail "re-selected 'main' frame after inferior call"
|
|
gdb_test "finish" ".*main.*at .*overload.cc:7\[78\].*" \
|
|
"finish call to marker1"
|
|
}
|
|
-re "#1 ($hex in )?main.*$gdb_prompt $" {
|
|
pass "re-selected 'main' frame after inferior call"
|
|
}
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 2\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 2 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 2 args" }
|
|
timeout { fail "(timeout) print call overloaded func 2 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 3\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 3 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 3 args" }
|
|
timeout { fail "(timeout) print call overloaded func 3 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 4\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 4 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 4 args" }
|
|
timeout { fail "(timeout) print call overloaded func 4 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 5\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 5 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 5 args" }
|
|
timeout { fail "(timeout) print call overloaded func 5 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 6\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 6 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 6 args" }
|
|
timeout { fail "(timeout) print call overloaded func 6 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 7\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 7 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 7 args" }
|
|
timeout { fail "(timeout) print call overloaded func 7 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7, 8)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 8\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 8 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 8 args" }
|
|
timeout { fail "(timeout) print call overloaded func 8 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7, 8, 9)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 9\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 9 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 9 args" }
|
|
timeout { fail "(timeout) print call overloaded func 9 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 10\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 10 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 10 args" }
|
|
timeout { fail "(timeout) print call overloaded func 10 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 11\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func 11 args"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func 11 args" }
|
|
timeout { fail "(timeout) print call overloaded func 11 args" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg()\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 1\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func void arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func void arg" }
|
|
timeout { fail "(timeout) print call overloaded func void arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((char)arg2)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 2\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func char arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func char arg" }
|
|
timeout { fail "(timeout) print call overloaded func char arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((signed char)arg3)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 3\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func signed char arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func signed char arg" }
|
|
timeout { fail "(timeout) print call overloaded func signed char arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((unsigned char)arg4)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 4\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func unsigned char arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func unsigned char arg" }
|
|
timeout { fail "(timeout) print call overloaded func unsigned char arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((short)arg5)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 5\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func short arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func short arg" }
|
|
timeout { fail "(timeout) print call overloaded func short arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((unsigned short)arg6)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 6\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func unsigned short arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func unsigned short arg" }
|
|
timeout { fail "(timeout) print call overloaded func unsigned short arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((int)arg7)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 7\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func int arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func int arg" }
|
|
timeout { fail "(timeout) print call overloaded func int arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((unsigned int)arg8)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 8\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func unsigned int arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func unsigned int arg" }
|
|
timeout { fail "(timeout) print call overloaded func unsigned int arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((long)arg9)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 9\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func long arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func long arg" }
|
|
timeout { fail "(timeout) print call overloaded func long arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((unsigned long)arg10)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 10\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func unsigned long arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func unsigned long arg" }
|
|
timeout { fail "(timeout) print call overloaded func unsigned long arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((float)arg11)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 11\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func float arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func float arg" }
|
|
timeout { fail "(timeout) print call overloaded func float arg" }
|
|
}
|
|
|
|
|
|
send_gdb "print foo_instance1.overload1arg((double)arg12)\n"
|
|
gdb_expect {
|
|
-re ".\[0-9\]* = 12\r\n$gdb_prompt $" {
|
|
pass "print call overloaded func double arg"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "print call overloaded func double arg" }
|
|
timeout { fail "(timeout) print call overloaded func double arg" }
|
|
}
|
|
|
|
# Now some tests to see if we can list overloaded functions properly:
|
|
|
|
gdb_test "set listsize 1" "" ""
|
|
# send_gdb "set listsize 1\n"
|
|
# gdb_expect -re ".*$gdb_prompt $"
|
|
|
|
#
|
|
# Decide whether to use "()" or "(void)"
|
|
#
|
|
|
|
send_gdb "info func overloadfnarg\n"
|
|
gdb_expect {
|
|
-re ".*overloadfnarg\\(void\\).*$gdb_prompt $" {
|
|
gdb_test "list foo::overloadfnarg(void)"\
|
|
".*int foo::overloadfnarg.*\\(void\\).*" \
|
|
"list overloaded function with no args"
|
|
}
|
|
-re ".*overloadfnarg\\(\\).*$gdb_prompt $" {
|
|
gdb_test "list foo::overloadfnarg()"\
|
|
".*int foo::overloadfnarg.*\\(void\\).*" \
|
|
"list overloaded function with no args"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "list overloaded function with no args (no matching symbol)"
|
|
}
|
|
}
|
|
|
|
gdb_test "list foo::overloadfnarg(int)"\
|
|
"int foo::overloadfnarg.*\\(int arg\\).*" \
|
|
"list overloaded function with int arg"
|
|
|
|
gdb_test "list foo::overloadfnarg(int, int (*)(int))" \
|
|
"int foo::overloadfnarg.*\\(int arg, int \\(\\*foo\\) \\(int\\)\\).*" \
|
|
"list overloaded function with function ptr args"
|
|
|
|
# This one crashes GDB. Don't know why yet.
|
|
gdb_test "list \"foo::overloadfnarg(int, int (*)(int))\"" \
|
|
"int foo::overloadfnarg.*\\(int arg, int \\(\\*foo\\) \\(int\\)\\).*" \
|
|
"list overloaded function with function ptr args - quotes around argument"
|
|
|
|
gdb_test "print intToChar(1)" ".\[0-9\]* = 297"
|