mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-18 18:51:24 +08:00
re PR debug/45088 (pointer type information lost in debuginfo)
Fix for PR debug/45088 gcc/ * dwarf2out.c (gen_type_die_with_usage): Do not try to emit debug info for a redundant typedef that has DECL_ORIGINAL_TYPE set. Use that underlying type instead. gcc/testsuite/ * g++.dg/debug/dwarf2/self-ref-1.C: New test. * g++.dg/debug/dwarf2/self-ref-2.C: Likewise. From-SVN: r167976
This commit is contained in:
parent
a4ad1c7a08
commit
d997fbe8f1
@ -1,3 +1,9 @@
|
||||
2010-12-17 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
* dwarf2out.c (gen_type_die_with_usage): Do not try to emit debug
|
||||
info for a redundant typedef that has DECL_ORIGINAL_TYPE set. Use
|
||||
that underlying type instead.
|
||||
|
||||
2010-12-16 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR middle-end/44563
|
||||
|
@ -20251,13 +20251,23 @@ gen_tagged_type_die (tree type,
|
||||
|
||||
static void
|
||||
gen_type_die_with_usage (tree type, dw_die_ref context_die,
|
||||
enum debug_info_usage usage)
|
||||
enum debug_info_usage usage)
|
||||
{
|
||||
struct array_descr_info info;
|
||||
|
||||
if (type == NULL_TREE || type == error_mark_node)
|
||||
return;
|
||||
|
||||
if (TYPE_NAME (type) != NULL_TREE
|
||||
&& TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
|
||||
&& is_redundant_typedef (TYPE_NAME (type))
|
||||
&& DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
|
||||
/* The DECL of this type is a typedef we don't want to emit debug
|
||||
info for but we want debug info for its underlying typedef.
|
||||
This can happen for e.g, the injected-class-name of a C++
|
||||
type. */
|
||||
type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
|
||||
|
||||
/* If TYPE is a typedef type variant, let's generate debug info
|
||||
for the parent typedef which TYPE is a type of. */
|
||||
if (typedef_variant_p (type))
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-12-17 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
* g++.dg/debug/dwarf2/self-ref-1.C: New test.
|
||||
* g++.dg/debug/dwarf2/self-ref-2.C: Likewise.
|
||||
|
||||
2010-12-16 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
PR tree-optimization/46924
|
||||
|
28
gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C
Normal file
28
gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C
Normal file
@ -0,0 +1,28 @@
|
||||
// Origin: PR debug/45088
|
||||
// { dg-do compile }
|
||||
// { dg-options "-g -dA" }
|
||||
// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } }
|
||||
|
||||
struct A
|
||||
{
|
||||
virtual ~A();
|
||||
};
|
||||
|
||||
struct B : public A
|
||||
{
|
||||
virtual ~B(){}
|
||||
};
|
||||
|
||||
struct C : public B
|
||||
{
|
||||
A* a1;
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
C c;
|
||||
c.a1 = 0;
|
||||
return 0;
|
||||
}
|
||||
|
29
gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C
Normal file
29
gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C
Normal file
@ -0,0 +1,29 @@
|
||||
// Origin: PR debug/45088
|
||||
// { dg-do compile }
|
||||
// { dg-options "-g -dA" }
|
||||
// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } }
|
||||
|
||||
template<class T>
|
||||
struct A
|
||||
{
|
||||
virtual ~A();
|
||||
};
|
||||
|
||||
struct B : public A<int>
|
||||
{
|
||||
virtual ~B(){}
|
||||
};
|
||||
|
||||
struct C : public B
|
||||
{
|
||||
A<int>* a1;
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
C c;
|
||||
c.a1 = 0;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user