From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7733 invoked by alias); 18 Mar 2013 09:20:27 -0000 Received: (qmail 7704 invoked by uid 55); 18 Mar 2013 09:20:26 -0000 From: "cvs-commit at gcc dot gnu.org" To: gdb-prs@sourceware.org Subject: [Bug c++/15203] GDB can't find static variable declared locally Date: Mon, 18 Mar 2013 09:20:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gdb X-Bugzilla-Component: c++ X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: cvs-commit at gcc dot gnu.org X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gdb-prs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-prs-owner@sourceware.org X-SW-Source: 2013-q1/txt/msg00463.txt.bz2 http://sourceware.org/bugzilla/show_bug.cgi?id=15203 --- Comment #4 from cvs-commit at gcc dot gnu.org 2013-03-18 09:20:22 UTC --- CVSROOT: /cvs/src Module name: src Branch: gdb_7_6-branch Changes by: sergiodj@sourceware.org 2013-03-18 09:20:07 Modified files: gdb : ChangeLog cp-namespace.c elfread.c gdb/testsuite : ChangeLog gdb/testsuite/gdb.cp: m-static.cc m-static.exp Log message: From: Sergio Durigan Junior Subject: [PATCH] Fix for PR c++/15203 and PR c++/15210 Date: Sat, 09 Mar 2013 02:50:49 -0300 (5 days, 4 hours, 57 minutes ago) Message-ID: Hi, This bug was reported internally at our Bugzilla, along with a proposed fix. After talking to Keith about it, he investigated and came up with another patch needed to really fix the issue on CVS HEAD. The first part of the fix is the patch to cp-namespace.c. It handles the case when we are accessing a static variable inside a function (inside a class) by the full linespec (is it right, Keith?). E.g.: class foo { public: int bar() { static int var = 0; } }; And then, printing the value of `var': (gdb) print 'foo::bar()::var' GDB would fall in an internal_error: gdb/cp-namespace.c:816: internal-error: cp_lookup_nested_symbol called on a non-aggregate type. This is because `cp_lookup_nested_symbol' is not handling the case when TYPE_CODE is either _FUNC or _METHOD. This patch fixes it by returning NULL in this case. The second part of the fix is the patch to elfread.c. It is needed because the BSF_GNU_UNIQUE flag was added to some symbols in . Because of that, (still) the command: (gdb) print 'foo::bar()::var' where `var' is a static variable returns: "No symbol "foo::bar()::var" in current context." So with the second patch applied the command finally DTRT: (gdb) print 'foo::bar()::var' $1 = 0 This may not be the ideal solution, according to Keith it would be good to implement productions on c-exp.y in order to recognize CLASS::FUNCTION::VARIABLE, but it is a solution which works with what we have today. I regtested it in Fedora 17 x86_64 with -m64 and -m32, including gdbserver, without regressions. gdb/: 2013-03-14 Keith Seitz Alan Matsuoka PR c++/15203 PR c++/15210 * cp-namespace.c (cp_lookup_nested_symbol): Handle TYPE_CODE_FUNC and TYPE_CODE_METHOD. * elfread.c (elf_symtab_read): Handle BSF_GNU_UNIQUE for certain symbols. gdb/testsuite/: 2013-03-14 Sergio Durigan Junior PR c++/15203 PR c++/15210 * gdb.cp/m-static.cc (keepalive_int): New function. (gnu_obj_1::method): New variable `sintvar', call `keepalive_int'. * gdb.cp/m-static.exp: New test for `sintvar'. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.15260.2.6&r2=1.15260.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/cp-namespace.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.65&r2=1.65.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/elfread.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.148&r2=1.148.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.3580.2.1&r2=1.3580.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.cp/m-static.cc.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.cp/m-static.exp.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.21&r2=1.21.2.1 -- Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.