Bug 11098 - [3.3./3.4 regression] [dwarf2] g++ doesn't emit complete debugging information for local variables in destructors
Summary: [3.3./3.4 regression] [dwarf2] g++ doesn't emit complete debugging informatio...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: debug (show other bugs)
Version: 3.3
: P2 critical
Target Milestone: 3.3.1
Assignee: Mark Mitchell
URL:
Keywords:
: 8542 10156 (view as bug list)
Depends on:
Blocks:
 
Reported: 2003-06-05 07:27 UTC by Michael Vanier
Modified: 2004-01-17 04:22 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2003-07-05 15:45:24


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Vanier 2003-06-05 07:27:35 UTC
Consider this code (in the file "foo.cc"):

// Begin code:
class Test {
private:
    int *data;
public:
    Test();
    ~Test();
};

Test::Test() {
    data = new int[1000];
}

Test::~Test() {
    int *t = data;
    delete [] t;
}


int main() {
    Test s;
    return 0;
}
// End code.

When I compile this with "g++ -Wall -g foo.cc -o foo" and then bring up gdb 5.3
and set a breakpoint in the destructor, this happens:

[tap] gdb foo
GNU gdb 5.3
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) break Test::~Test()
Breakpoint 1 at 0x80484c6: file foo.cc, line 13.
(gdb) run
Starting program: /home/mvanier/tmp/cs11/foo 

Breakpoint 1, ~Test (this=0xbfffee30) at foo.cc:14
14          int *t = data;
(gdb) p t
No symbol "t" in current context.
(gdb) info locals
No locals.
(gdb) 

Clearly this is wrong, as "t" is a local variable in the destructor.

I sent in a bug report to the gdb developers, and they say that the reason this
is happening is that g++ is not outputting the correct debugging information.
They tell me I should refer you to bugs debug/10156 in the gcc GNATS database
and c++/1234 in the gdb GNATS database (the latter being the one I submitted).
Thanks in advance for your help.
Comment 1 Andrew Pinski 2003-07-05 15:45:23 UTC
With -gstabs, I get the definition, so this is user viewable regression.  Also on 2.95.3 with -
gdwarf-2 I get the variable printed so this is true regression.

I do not get the variable printed in the mainline (20030705).
Comment 2 CVS Commits 2003-07-15 01:04:23 UTC
Subject: Bug 11098

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	mmitchel@gcc.gnu.org	2003-07-15 01:04:21

Modified files:
	gcc            : ChangeLog integrate.c 

Log message:
	PR debug/11098
	* integrate.c (copy_decl_for_inlining): Do not mark copied decls
	as DECL_ABSTRACT.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.502&r2=2.503
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/integrate.c.diff?cvsroot=gcc&r1=1.230&r2=1.231

Comment 3 CVS Commits 2003-07-15 01:05:50 UTC
Subject: Bug 11098

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_3-branch
Changes by:	mmitchel@gcc.gnu.org	2003-07-15 01:05:45

Modified files:
	gcc            : ChangeLog integrate.c 

Log message:
	PR debug/11098
	* integrate.c (copy_decl_for_inlining): Do not mark copied decls
	as DECL_ABSTRACT.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.656&r2=1.16114.2.657
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/integrate.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.206.2.3&r2=1.206.2.4

Comment 4 Mark Mitchell 2003-07-15 01:06:57 UTC
Fixed in GCC 3.3.1 and GCC 3.4.
Comment 5 Mark Mitchell 2003-07-15 01:12:36 UTC
*** Bug 10156 has been marked as a duplicate of this bug. ***
Comment 6 Andrew Pinski 2003-09-03 06:07:32 UTC
*** Bug 8542 has been marked as a duplicate of this bug. ***