From 80bde45b083facc3f141c29c8c71d38619b1d9cb Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Fri, 6 May 2011 17:34:01 +0000 Subject: dwarf2out.c (contains_subprogram_definition): New function. * dwarf2out.c (contains_subprogram_definition): New function. (should_move_die_to_comdat): Call it. From-SVN: r173497 --- gcc/dwarf2out.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'gcc/dwarf2out.c') diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index e20b01b..c08f5aa 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10170,6 +10170,20 @@ is_nested_in_subprogram (dw_die_ref die) return local_scope_p (decl); } +/* Return non-zero if this DIE contains a defining declaration of a + subprogram. */ + +static int +contains_subprogram_definition (dw_die_ref die) +{ + dw_die_ref c; + + if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die)) + return 1; + FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1); + return 0; +} + /* Return non-zero if this is a type DIE that should be moved to a COMDAT .debug_types section. */ @@ -10188,6 +10202,8 @@ should_move_die_to_comdat (dw_die_ref die) || get_AT (die, DW_AT_abstract_origin) || is_nested_in_subprogram (die)) return 0; + /* A type definition should never contain a subprogram definition. */ + gcc_assert (!contains_subprogram_definition (die)); return 1; case DW_TAG_array_type: case DW_TAG_interface_type: -- cgit v1.1