re PR debug/45660 (ICE in dwarf2out_finish)

PR debug/45660
	* dwarf2out.c (gen_decl_die): Call gen_type_die for origin before
	gen_type_die for function/method return type.

	* g++.dg/debug/pr45660.C: New test.

From-SVN: r164271
This commit is contained in:
Jakub Jelinek 2010-09-14 11:48:04 +02:00 committed by Jakub Jelinek
parent 5a2c198638
commit 4a6e5cc885
4 changed files with 35 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2010-09-14 Jakub Jelinek <jakub@redhat.com>
PR debug/45660
* dwarf2out.c (gen_decl_die): Call gen_type_die for origin before
gen_type_die for function/method return type.
2010-09-14 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/45470

View File

@ -20602,16 +20602,20 @@ gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
else if (debug_info_level > DINFO_LEVEL_TERSE)
{
/* Before we describe the FUNCTION_DECL itself, make sure that we
have described its return type. */
have its containing type. */
if (!origin)
origin = decl_class_context (decl);
if (origin != NULL_TREE)
gen_type_die (origin, context_die);
/* And its return type. */
gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
/* And its virtual context. */
if (DECL_VINDEX (decl) != NULL_TREE)
gen_type_die (DECL_CONTEXT (decl), context_die);
/* And its containing type. */
if (!origin)
origin = decl_class_context (decl);
/* Make sure we have a member DIE for decl. */
if (origin != NULL_TREE)
gen_type_die_for_member (origin, decl, context_die);

View File

@ -1,3 +1,8 @@
2010-09-14 Jakub Jelinek <jakub@redhat.com>
PR debug/45660
* g++.dg/debug/pr45660.C: New test.
2010-09-14 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/45470

View File

@ -0,0 +1,16 @@
// PR debug/45660
// { dg-do compile }
// { dg-options "-g -fno-inline" }
void
test ()
{
struct S
{
typedef void (**T) (void);
static T i (void) { return 0; }
};
S s;
if (s.i ())
*s.i () = 0;
}