From: nobody <> Date: Fri, 12 Mar 2004 17:46:28 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create branch 'gdb_6_1-branch'. X-Git-Tag: ezannoni_pie-20040323-branchpoint~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=51550d1a9e579cc2163fc6f09744867302f12fb5;p=thirdparty%2Fbinutils-gdb.git This commit was manufactured by cvs2svn to create branch 'gdb_6_1-branch'. Cherrypick from master 2004-03-12 17:46:27 UTC David Carlton '2004-03-12 David Carlton ': gdb/testsuite/gdb.cp/pr-1553.cc gdb/testsuite/gdb.cp/pr-1553.exp --- 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