From 5ec96609560006b0b7787892766fa1936c30a2b2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 21 Jun 2010 18:30:43 +0200 Subject: [PATCH] dwarf2out.c (add_linkage_name): New function. * dwarf2out.c (add_linkage_name): New function. Don't add anything to DW_TAG_member DIEs. (add_name_and_src_coords_attributes): Use it. (gen_variable_die): Call it for C++ static data members if specification is DW_TAG_member. From-SVN: r161096 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2out.c | 52 ++++++++++++++++++++++++++++++------------------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba9f4b8458b..f6e1007baab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2010-06-21 Jakub Jelinek + * dwarf2out.c (add_linkage_name): New function. Don't add + anything to DW_TAG_member DIEs. + (add_name_and_src_coords_attributes): Use it. + (gen_variable_die): Call it for C++ static data members if + specification is DW_TAG_member. + * dwarf2out.c (base_type_die): Use DW_ATE_UTF for C++ char16_t and char32_t. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 7a7eb220b3f..701d7927a67 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -17330,6 +17330,34 @@ add_src_coords_attributes (dw_die_ref die, tree decl) add_AT_unsigned (die, DW_AT_decl_line, s.line); } +/* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */ + +static void +add_linkage_name (dw_die_ref die, tree decl) +{ + if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL) + && TREE_PUBLIC (decl) + && !DECL_ABSTRACT (decl) + && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)) + && die->die_tag != DW_TAG_member) + { + /* Defer until we have an assembler name set. */ + if (!DECL_ASSEMBLER_NAME_SET_P (decl)) + { + limbo_die_node *asm_name; + + asm_name = ggc_alloc_cleared_limbo_die_node (); + asm_name->die = die; + asm_name->created_for = decl; + asm_name->next = deferred_asm_name; + deferred_asm_name = asm_name; + } + else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) + add_AT_string (die, AT_linkage_name, + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); + } +} + /* Add a DW_AT_name attribute and source coordinate attribute for the given decl, but only if it actually has a name. */ @@ -17347,26 +17375,7 @@ add_name_and_src_coords_attributes (dw_die_ref die, tree decl) if (! DECL_ARTIFICIAL (decl)) add_src_coords_attributes (die, decl); - if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL) - && TREE_PUBLIC (decl) - && !DECL_ABSTRACT (decl) - && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))) - { - /* Defer until we have an assembler name set. */ - if (!DECL_ASSEMBLER_NAME_SET_P (decl)) - { - limbo_die_node *asm_name; - - asm_name = ggc_alloc_cleared_limbo_die_node (); - asm_name->die = die; - asm_name->created_for = decl; - asm_name->next = deferred_asm_name; - deferred_asm_name = asm_name; - } - else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) - add_AT_string (die, AT_linkage_name, - IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); - } + add_linkage_name (die, decl); } #ifdef VMS_DEBUGGING_INFO @@ -18984,6 +18993,9 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line) add_AT_unsigned (var_die, DW_AT_decl_line, s.line); + + if (old_die->die_tag == DW_TAG_member) + add_linkage_name (var_die, decl); } } else -- 2.30.2