aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-06-21 18:30:43 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2010-06-21 18:30:43 +0200
commit5ec96609560006b0b7787892766fa1936c30a2b2 (patch)
tree15df36708b64afffb2db6409e329fbcefba00404 /gcc
parentf0057424da31008bc4e1f97802160db6ff5a5e34 (diff)
downloadgcc-5ec96609560006b0b7787892766fa1936c30a2b2.zip
gcc-5ec96609560006b0b7787892766fa1936c30a2b2.tar.gz
gcc-5ec96609560006b0b7787892766fa1936c30a2b2.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/dwarf2out.c52
2 files changed, 38 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ba9f4b8..f6e1007 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2010-06-21 Jakub Jelinek <jakub@redhat.com>
+ * 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 7a7eb22..701d792 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