From 0e02aa50226babd5179cf4af1b47c69b17929ef5 Mon Sep 17 00:00:00 2001 From: David Carlton Date: Fri, 12 Mar 2004 17:46:27 +0000 Subject: [PATCH] 2004-03-12 David Carlton * 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. --- gdb/testsuite/ChangeLog | 7 ++++ gdb/testsuite/gdb.cp/local.exp | 10 ++++++ gdb/testsuite/gdb.cp/pr-1553.cc | 53 +++++++++++++++++++++++++++ gdb/testsuite/gdb.cp/pr-1553.exp | 62 ++++++++++++++++++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 gdb/testsuite/gdb.cp/pr-1553.cc create mode 100644 gdb/testsuite/gdb.cp/pr-1553.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4c09540a3d5..3f0fb2e9439 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2004-03-12 David Carlton + + * 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 * gdb.cp/templates.exp: Accept more template types. diff --git a/gdb/testsuite/gdb.cp/local.exp b/gdb/testsuite/gdb.cp/local.exp index 5cd2ee9e8e2..6bae99ff290 100644 --- a/gdb/testsuite/gdb.cp/local.exp +++ b/gdb/testsuite/gdb.cp/local.exp @@ -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" } } diff --git a/gdb/testsuite/gdb.cp/pr-1553.cc b/gdb/testsuite/gdb.cp/pr-1553.cc new file mode 100644 index 00000000000..58441fdb80f --- /dev/null +++ b/gdb/testsuite/gdb.cp/pr-1553.cc @@ -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); +} diff --git a/gdb/testsuite/gdb.cp/pr-1553.exp b/gdb/testsuite/gdb.cp/pr-1553.exp new file mode 100644 index 00000000000..fe9e2a26171 --- /dev/null +++ b/gdb/testsuite/gdb.cp/pr-1553.exp @@ -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 -- 2.30.2