Commit d997fbe8 by Dodji Seketeli Committed by Dodji Seketeli

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
parent a4ad1c7a
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> 2010-12-16 Jan Hubicka <jh@suse.cz>
PR middle-end/44563 PR middle-end/44563
...@@ -20251,13 +20251,23 @@ gen_tagged_type_die (tree type, ...@@ -20251,13 +20251,23 @@ gen_tagged_type_die (tree type,
static void static void
gen_type_die_with_usage (tree type, dw_die_ref context_die, 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; struct array_descr_info info;
if (type == NULL_TREE || type == error_mark_node) if (type == NULL_TREE || type == error_mark_node)
return; 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 /* If TYPE is a typedef type variant, let's generate debug info
for the parent typedef which TYPE is a type of. */ for the parent typedef which TYPE is a type of. */
if (typedef_variant_p (type)) if (typedef_variant_p (type))
......
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> 2010-12-16 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/46924 PR tree-optimization/46924
......
// 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;
}
// 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;
}
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