Bug 52605

Summary: LTO -g ICE when looking up context of VMTs of classes defined within functions
Product: gcc Reporter: Martin Jambor <jamborm>
Component: ltoAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: hubicka
Priority: P3 Keywords: lto
Version: 4.8.0   
Target Milestone: ---   
Host: x86_64-linux-gnu Target: x86_64-linux-gnu
Build: Known to work:
Known to fail: 4.7.0, 4.8.0 Last reconfirmed:
Bug Depends on:    
Bug Blocks: 47819    
Attachments: Testcase

Description Martin Jambor 2012-03-16 16:06:37 UTC
Created attachment 26905 [details]
Testcase

When compiling the attached testcase with -flto and -g, I get the
following ICE:

lto1: internal compiler error: tree check: expected tree that contains ‘decl minimal’ structure, have ‘record_type’ in lookup_decl_die, at dwarf2out.c:5118

This is the same problem I first encountered when LTOing Firefox and
which I reported in the mailing list a while ago
(http://gcc.gnu.org/ml/gcc-patches/2012-03/msg00551.html) but this
testcase is close to minimal.

The reason why we do not hit this wrong use of decl_function_context
without LTO is that the function dwarf2out_decl is never called on
VMTs when not doing LTO.
Comment 1 Martin Jambor 2012-04-23 17:04:23 UTC
This is still the only problem that prevents me from LTO building
Firefox with -g.  Moreover, I have just verified the problem is also
present also in 4.7 (and it's also the only one).  I really think we
should fix this for 4.7.1.

My patch proposed on the mailing list still applies (to both trunk and
the branch).
Comment 2 Martin Jambor 2012-05-02 19:50:40 UTC
Author: jamborm
Date: Wed May  2 19:50:37 2012
New Revision: 187063

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187063
Log:
2012-05-02  Martin Jambor  <mjambor@suse.cz>

	PR lto/52605
	* dwarf2out.c (dwarf2out_decl): Only lookup die representing context
	of a variable when the contect is a function.

	* gcc/testsuite/g++.dg/lto/pr52605_0.C: New test.


Added:
    trunk/gcc/testsuite/g++.dg/lto/pr52605_0.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/dwarf2out.c
    trunk/gcc/testsuite/ChangeLog
Comment 3 Martin Jambor 2012-05-03 17:00:48 UTC
Author: jamborm
Date: Thu May  3 17:00:32 2012
New Revision: 187109

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187109
Log:
2012-05-03  Martin Jambor  <mjambor@suse.cz>

	PR lto/52605
	* dwarf2out.c (dwarf2out_decl): Only lookup die representing context
	of a variable when the contect is a function.

	* gcc/testsuite/g++.dg/lto/pr52605_0.C: New test.


Added:
    branches/gcc-4_7-branch/gcc/testsuite/g++.dg/lto/pr52605_0.C
Modified:
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/dwarf2out.c
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog
Comment 4 Martin Jambor 2012-05-03 17:01:45 UTC
This should now be fixed.