diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-03-20 17:15:38 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-03-20 17:15:38 +0100 |
commit | 6e75c1a9f04e5021b338ee7c09478d02bea435a8 (patch) | |
tree | d0e0871f51c5c4244a1400d6cacd1f4df4a8469b | |
parent | e471a70a01a348b81d2a06802fdad4652106b998 (diff) | |
download | gcc-6e75c1a9f04e5021b338ee7c09478d02bea435a8.zip gcc-6e75c1a9f04e5021b338ee7c09478d02bea435a8.tar.gz gcc-6e75c1a9f04e5021b338ee7c09478d02bea435a8.tar.bz2 |
re PR debug/37890 (Incorrect nesting for DW_TAG_imported_declaration)
PR debug/37890
* dwarf2out.c (gen_namespace_die): Add context_die argument and use
it for block local namespace aliases.
(gen_decl_die): Pass context_die to gen_namespace_die.
From-SVN: r144978
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 21 |
2 files changed, 19 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6aefee..ed93f12 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-03-20 Jakub Jelinek <jakub@redhat.com> + + PR debug/37890 + * dwarf2out.c (gen_namespace_die): Add context_die argument and use + it for block local namespace aliases. + (gen_decl_die): Pass context_die to gen_namespace_die. + 2009-03-19 Jakub Jelinek <jakub@redhat.com> PR c/39495 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 3ea14688..133136b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5172,7 +5172,7 @@ static void gen_type_die (tree, dw_die_ref); static void gen_block_die (tree, dw_die_ref, int); static void decls_for_scope (tree, dw_die_ref, int); static int is_redundant_typedef (const_tree); -static void gen_namespace_die (tree); +static void gen_namespace_die (tree, dw_die_ref); static void gen_decl_die (tree, tree, dw_die_ref); static dw_die_ref force_decl_die (tree); static dw_die_ref force_type_die (tree); @@ -15093,18 +15093,19 @@ declare_in_namespace (tree thing, dw_die_ref context_die) /* Generate a DIE for a namespace or namespace alias. */ static void -gen_namespace_die (tree decl) +gen_namespace_die (tree decl, dw_die_ref context_die) { - dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die); + dw_die_ref namespace_die; /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace they are an alias of. */ if (DECL_ABSTRACT_ORIGIN (decl) == NULL) { /* Output a real namespace or module. */ - dw_die_ref namespace_die - = new_die (is_fortran () ? DW_TAG_module : DW_TAG_namespace, - context_die, decl); + context_die = setup_namespace_context (decl, comp_unit_die); + namespace_die = new_die (is_fortran () + ? DW_TAG_module : DW_TAG_namespace, + context_die, decl); /* For Fortran modules defined in different CU don't add src coords. */ if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl)) add_name_attribute (namespace_die, dwarf2_name (decl, 0)); @@ -15122,9 +15123,11 @@ gen_namespace_die (tree decl) dw_die_ref origin_die = force_decl_die (DECL_ABSTRACT_ORIGIN (decl)); + if (DECL_CONTEXT (decl) == NULL_TREE + || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL) + context_die = setup_namespace_context (decl, comp_unit_die); /* Now create the namespace alias DIE. */ - dw_die_ref namespace_die - = new_die (DW_TAG_imported_declaration, context_die, decl); + namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl); add_name_and_src_coords_attributes (namespace_die, decl); add_AT_die_ref (namespace_die, DW_AT_import, origin_die); equate_decl_number_to_die (decl, namespace_die); @@ -15313,7 +15316,7 @@ gen_decl_die (tree decl, tree origin, dw_die_ref context_die) case NAMESPACE_DECL: case IMPORTED_DECL: - gen_namespace_die (decl); + gen_namespace_die (decl, context_die); break; default: |