2004-03-12 David Carlton <carlton@kealia.com>

* gdb.cp/pr-1553.exp: New.  Tests for PR c++/1553.
	* gdb.cp/pr-1553.cc: Ditto.
	* gdb.cp/local.exp (ptype NestedInnerLocal): Add comment, third
	pass branch.
This commit is contained in:
David Carlton 2004-03-12 17:46:27 +00:00
parent c20b71be64
commit 0e02aa5022
4 changed files with 132 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-03-12 David Carlton <carlton@kealia.com>
* gdb.cp/pr-1553.exp: New. Tests for PR c++/1553.
* gdb.cp/pr-1553.cc: Ditto.
* gdb.cp/local.exp (ptype NestedInnerLocal): Add comment, third
pass branch.
2004-03-12 Michael Chastain <mec.gnu@mindspring.com>
* gdb.cp/templates.exp: Accept more template types.

View File

@ -263,10 +263,20 @@ gdb_expect {
#
# chastain 2002-04-08
# NOTE (2004-02-24, carlton): This test really is invalid -
# 'NestedInnerLocal' shouldn't be visible, so only the third
# expression should count as a pass. I'm leaving in the earlier
# passes, however, given the current problematic state of our local
# class support, but once we fix PR gdb/482, we should delete this
# test.
send_gdb "ptype NestedInnerLocal\n"
gdb_expect {
-re "type = class NestedInnerLocal \{\[\r\n\t \]*public:\[\r\n\t \]*int nil;\[\r\n\t \]*int nil_foo\\(int\\);\[\r\n\t \]*\}.*$gdb_prompt $" { pass "ptype NestedInnerLocal" }
-re "type = class NestedInnerLocal \{\[\r\n\t \]*public:\[\r\n\t \]*int nil;\[\r\n\t \]*NestedInnerLocal *& *operator *= *\\((main${sep}::|)InnerLocal::NestedInnerLocal const *&\\);\[\r\n\t \]*NestedInnerLocal\\((main${sep}::|)InnerLocal::NestedInnerLocal const *&\\);\[\r\n\t \]*NestedInnerLocal\\((void|)\\);\[\r\n\t \]*int nil_foo\\(int\\);\[\r\n\t \]*\}.*$gdb_prompt $" { pass "ptype NestedInnerLocal" }
-re "No symbol \"NestedInnerLocal\" in current context\.\r\n$gdb_prompt $" {
pass "ptype NestedInnerLocal"
}
-re ".*$gdb_prompt $" { fail "ptype NestedInnerLocal" }
timeout { fail "(timeout) ptype NestedInnerLocal" }
}

View File

@ -0,0 +1,53 @@
class A {
public:
class B;
class C;
};
class A::B {
int a_b;
public:
C* get_c(int i);
};
class A::C
{
int a_c;
};
class E {
public:
class F;
};
class E::F {
public:
int e_f;
F& operator=(const F &other);
};
void refer_to (E::F *f) {
// Do nothing.
}
void refer_to (A::C **ref) {
// Do nothing. But, while we're at it, force out debug info for
// A::B and E::F.
A::B b;
E::F f;
refer_to (&f);
}
int main () {
A::C* c_var;
A::B* b_var;
E *e_var;
// Keep around a reference so that GCC 3.4 doesn't optimize the variable
// away.
refer_to (&c_var);
}

View File

@ -0,0 +1,62 @@
# Copyright 2004 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.
# Test for PR gdb/1553.
# This file is part of the gdb testsuite.
set ws "\[\r\n\t \]+"
if $tracelevel then {
strace $tracelevel
}
if { [skip_cplus_tests] } { continue }
#
# test running programs
#
set prms_id 0
set bug_id 0
set testfile "pr-1553"
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}
if ![runto_main] then {
perror "couldn't run to breakpoint"
continue
}
gdb_test "ptype c_var" "type = class A::C \{${ws}private:${ws}int a_c;${ws}\} \\*"
gdb_test "ptype E::F" "type = class E::F \{${ws}public:${ws}int e_f;${ws}E::F & operator=\\(E::F const ?&\\);${ws}\}"
gdb_exit
return 0