Commit 35ea1c5a by Dodji Seketeli Committed by Dodji Seketeli

re PR debug/45024 (wrong nesting for inner template class)

Fix PR debug/45024

gcc/ChangeLog:
	PR debug/45024
	* dwarf2out.c (scope_die_for): Don't fall back to the compilation
	unit DIE if we can find the scope DIE.

gcc/testsuite/ChangeLog:
	PR debug/45024
	* g++.dg/debug/dwarf2/nested-2.C: New test case.

From-SVN: r162420
parent ac0ab4f7
2010-07-22 Dodji Seketeli <dodji@redhat.com>
PR debug/45024
* dwarf2out.c (scope_die_for): Don't fall back to the compilation
unit DIE if we can find the scope DIE.
2010-07-22 Bernd Schmidt <bernds@codesourcery.com>
* ira-build.c (ira_create_object): New arg SUBWORD; all callers changed.
......
......@@ -17585,9 +17585,13 @@ scope_die_for (tree t, dw_die_ref context_die)
{
gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
|| TREE_ASM_WRITTEN (containing_scope));
/*We are not in the middle of emitting the type
CONTAINING_SCOPE. Let's see if it's emitted already. */
scope_die = lookup_type_die (containing_scope);
/* If none of the current dies are suitable, we get file scope. */
scope_die = comp_unit_die;
if (scope_die == NULL)
scope_die = comp_unit_die;
}
else
scope_die = lookup_type_die (containing_scope);
......
2010-07-22 Dodji Seketeli <dodji@redhat.com>
PR debug/45024
* g++.dg/debug/dwarf2/nested-2.C: New test case.
2010-07-22 H.J. Lu <hongjiu.lu@intel.com>
* gcc.dg/lto/20100722-1_0.c: Replace dg-require-lto-plugin
......
/*
Origin: PR debug/45024
{ dg-options "-g -dA -fno-merge-debug-strings" }
{ dg-do compile }
*/
struct S {
template<typename Z> struct T { };
};
S::T<int> tval;
/*
We want to express that the DIE of S::T<int> must be a child of the DIE of S, like in assembly this output:
.uleb128 0x2 # (DIE (0x9e) DW_TAG_structure_type)
.ascii "S\0" # DW_AT_name
.byte 0x1 # DW_AT_byte_size
.byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc)
.byte 0x1 # DW_AT_decl_line
.long 0xbc # DW_AT_sibling
.uleb128 0x3 # (DIE (0xa8) DW_TAG_structure_type)
.ascii "T<int>\0" # DW_AT_name
.byte 0x1 # DW_AT_byte_size
.byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc)
.byte 0x2 # DW_AT_decl_line
.uleb128 0x4 # (DIE (0xb3) DW_TAG_template_type_param)
.ascii "Z\0" # DW_AT_name
.long 0xbc # DW_AT_type
.byte 0 # end of children of DIE 0xa8
.byte 0 # end of children of DIE 0x9e
Hence the slightly odd regexp:
{ dg-final { scan-assembler "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"S\\\\0\"\[ \t\]+#\[ \t\]+DW_AT_name\[\n\r\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"T<int>\\\\0\"\[ \t\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_template_type_param\\)\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*#\[ \t\]+end of children of DIE\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE\[^\n\r\]*" } }
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment