re PR debug/43190 (Used pointer typedefs eliminated from debug info)

PR debug/43190
	* function.c (used_types_insert): Don't skip through named pointer
	types.  Don't use TYPE_MAIN_VARIANT if the original type has a name
	and it is different from the main variant's type.

	* c-c++-common/dwarf2/pr43190.c: New test.

From-SVN: r157092
This commit is contained in:
Jakub Jelinek 2010-02-26 16:58:57 +01:00 committed by Jakub Jelinek
parent a1e205cf51
commit 095c7b3cbd
4 changed files with 34 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2010-02-26 Jakub Jelinek <jakub@redhat.com>
PR debug/43190
* function.c (used_types_insert): Don't skip through named pointer
types. Don't use TYPE_MAIN_VARIANT if the original type has a name
and it is different from the main variant's type.
2010-02-26 Nick Clifton <nickc@redhat.com>
* config/rx/rx.md (sminsi3): Remove bogus alternative.

View File

@ -1,7 +1,7 @@
/* Expands front end tree to back end RTL for GCC.
Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010 Free Software Foundation, Inc.
This file is part of GCC.
@ -5469,8 +5469,13 @@ void
used_types_insert (tree t)
{
while (POINTER_TYPE_P (t) || TREE_CODE (t) == ARRAY_TYPE)
t = TREE_TYPE (t);
t = TYPE_MAIN_VARIANT (t);
if (TYPE_NAME (t))
break;
else
t = TREE_TYPE (t);
if (TYPE_NAME (t) == NULL_TREE
|| TYPE_NAME (t) == TYPE_NAME (TYPE_MAIN_VARIANT (t)))
t = TYPE_MAIN_VARIANT (t);
if (debug_info_level > DINFO_LEVEL_NONE)
{
if (cfun)

View File

@ -1,3 +1,8 @@
2010-02-26 Jakub Jelinek <jakub@redhat.com>
PR debug/43190
* c-c++-common/dwarf2/pr43190.c: New test.
2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
PR testsuite/37074:

View File

@ -0,0 +1,13 @@
/* PR debug/43190 */
/* { dg-options "-gdwarf-2 -dA" } */
/* { dg-final { scan-assembler "DW_TAG_structure_type\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"S\[^\\r\\n\]*DW_AT_name" } } */
/* { dg-final { scan-assembler "DW_TAG_typedef\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"T\[^\\r\\n\]*DW_AT_name" } } */
typedef struct S { int i; } *T;
#define M(p) ((T) (p))
void
foo (void *p)
{
M (p)->i++;
}