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:
parent
c20b71be64
commit
0e02aa5022
|
@ -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.
|
||||
|
|
|
@ -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" }
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
|
Loading…
Reference in New Issue