From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16309 invoked by alias); 27 May 2002 22:41:17 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16297 invoked from network); 27 May 2002 22:41:13 -0000 Received: from unknown (HELO duracef.shout.net) (204.253.184.12) by sources.redhat.com with SMTP; 27 May 2002 22:41:13 -0000 Received: (from mec@localhost) by duracef.shout.net (8.11.6/8.11.6) id g4RMfCY07438; Mon, 27 May 2002 17:41:12 -0500 Date: Mon, 27 May 2002 16:02:00 -0000 From: Michael Elizabeth Chastain Message-Id: <200205272241.g4RMfCY07438@duracef.shout.net> To: bkoz@redhat.com, gdb-patches@sources.redhat.com Subject: Re: gdb.c++ testsuite 1.3: member_data_static.exp (resend) X-SW-Source: 2002-05/txt/msg00956.txt.bz2 As usual, send_gdb/gdb_expect => gdb_test. This test script has 6 FAILs in each configuration tested. FAIL: gdb.c++/m-static.exp: derived template object, static enum FAIL: gdb.c++/m-static.exp: template object, static const bool FAIL: gdb.c++/m-static.exp: template object, static const int FAIL: gdb.c++/m-static.exp: template object, static long FAIL: gdb.c++/m-static.exp: template object, static enum FAIL: gdb.c++/m-static.exp: template object, static enum Something in the toolchain is optimizing away unused static objects. When I run gdb by hand, I see this: (gdb) print test2 $1 = { = {static test = true, static key1 = 5, static key2 = 77, static value = oriental}, _vptr.gnu_obj_2 = 0x804e76c, static value_derived = } (gdb) print test3 $2 = {static data = } This happens with both -gdwarf-2 and -gstabs+ on all gcc's and binutil's in my test bed. I fixed this by adding references to the data fields, like this: refer(&test2.value_derived); refer(&test3.data); refer(&test3.data.value_derived); I'm not going to commit these test files yet. Here are the files. Can you let me know whether these are okay? Michael C === // 2002-05-13 namespace __gnu_test { enum region { oriental, egyptian, greek, etruscan, roman }; // Test one. class gnu_obj_1 { protected: typedef region antiquities; static const bool test = true; static const int key1 = 5; static long key2; static antiquities value; public: gnu_obj_1(antiquities a, long l) {} }; const bool gnu_obj_1::test; const int gnu_obj_1::key1; long gnu_obj_1::key2 = 77; gnu_obj_1::antiquities gnu_obj_1::value = oriental; // Test two. template class gnu_obj_2: public virtual gnu_obj_1 { public: static antiquities value_derived; public: gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { } }; template typename gnu_obj_2::antiquities gnu_obj_2::value_derived = etruscan; // Test three. template class gnu_obj_3 { public: typedef region antiquities; static gnu_obj_2 data; public: gnu_obj_3(antiquities b) { } }; template gnu_obj_2 gnu_obj_3::data(etruscan); } // gcc optimizes out unused template statics void refer(const void *) { } int main() { using namespace __gnu_test; gnu_obj_1 test1(egyptian, 4589); gnu_obj_2 test2(roman); gnu_obj_3 test3(greek); refer(&test2.value_derived); refer(&test3.data); refer(&test3.data.value_derived); return 0; } === # Copyright 2002 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. # Tests for member static data # 2002-05-13 Benjamin Kosnik # This file is part of the gdb testsuite if $tracelevel then { strace $tracelevel } if { [skip_cplus_tests] } { continue } # # test running programs # set prms_id 0 set bug_id 0 set testfile "m-static" 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 } # One. gdb_test "break 66" "Breakpoint \[0-9\]*.*line 66\\." gdb_test "continue" "Continuing\\.\r\n\r\nBreakpoint.*at.*m-static\\.cc:66\r\n.*" "continue to 66" # simple object, static const bool gdb_test "print test1.test" "\\$\[0-9\]* = true" "simple object, static const bool" # simple object, static const int gdb_test "print test1.key1" "\\$\[0-9\]* = 5" "simple object, static const int" # simple object, static long gdb_test "print test1.key2" "\\$\[0-9\]* = 77" "simple object, static long" # simple object, static enum gdb_test "print test1.value" "\\$\[0-9\]* = oriental" "simple object, static enum" # Two. gdb_test "break 67" "Breakpoint \[0-9\]*.*line 67\\." gdb_test "continue" "Continuing\\.\r\n\r\nBreakpoint.*at.*m-static\\.cc:67\r\n.*" "continue to 67" # derived template object, base static const bool gdb_test "print test2.test" "\\$\[0-9\]* = true" "derived template object, base static const bool" # derived template object, base static const int gdb_test "print test2.key1" "\\$\[0-9\]* = 5" "derived template object, base static const int" # derived template object, base static long gdb_test "print test2.key2" "\\$\[0-9\]* = 77" "derived template object, base static long" # derived template object, base static enum gdb_test "print test2.value" "\\$\[0-9\].* = oriental" "derived template object, base static enum" # derived template object, static enum gdb_test "print test2.value_derived" "\\$\[0-9\].* = etruscan" "derived template object, static enum" # Three. gdb_test "break 73" "Breakpoint \[0-9\]*.*line 73\\." gdb_test "continue" "Continuing\\.\r\n\r\nBreakpoint.*at.*m-static\\.cc:73\r\n.*" "continue to 73" # template object, static derived template data member's base static const bool gdb_test "print test3.data.test" "\\$\[0-9\].* = true" "template object, static const bool" # template object, static derived template data member's base static const int gdb_test "print test3.data.key1" "\\$\[0-9\].* = 5" "template object, static const int" # template object, static derived template data member's base static long gdb_test "print test3.data.key2" "\\$\[0-9\].* = 77" "template object, static long" # template object, static derived template data member's base static enum gdb_test "print test3.data.value" "\\$\[0-9\].* = oriental" "template object, static enum" # template object, static derived template data member's static enum gdb_test "print test3.data.value_derived" "\\$\[0-9\].* = etruscan" "template object, static derived enum" gdb_exit return 0