aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-03-20 17:15:38 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-03-20 17:15:38 +0100
commit6e75c1a9f04e5021b338ee7c09478d02bea435a8 (patch)
treed0e0871f51c5c4244a1400d6cacd1f4df4a8469b
parente471a70a01a348b81d2a06802fdad4652106b998 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/dwarf2out.c21
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: