From 98381eb4870eb42b220822a8596104b42277bdf5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 17 Mar 2009 18:51:10 +0100 Subject: dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow non-NAMESPACE_DECL IMPORTED_DECL_ASSOCIATED_DECL. * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow non-NAMESPACE_DECL IMPORTED_DECL_ASSOCIATED_DECL. * name-lookup.c (cp_emit_debug_info_for_using): Emit USING_STMTs instead of calling imported_module_or_decl debug hook if building_stmt_tree (). * cp-gimplify.c (cp_gimplify_expr): Don't assert the first operand is a NAMESPACE_DECL. From-SVN: r144912 --- gcc/ChangeLog | 3 +++ gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-gimplify.c | 3 +-- gcc/cp/name-lookup.c | 7 ++++++- gcc/dwarf2out.c | 30 ++++++++++-------------------- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f758952..fae65db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2009-03-17 Jakub Jelinek + * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Allow + non-NAMESPACE_DECL IMPORTED_DECL_ASSOCIATED_DECL. + PR debug/39471 * dwarf2out.c (dwarf2out_imported_module_or_decl_1): Emit DW_TAG_imported_module even if decl is IMPORTED_DECL with diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b015dfa..b25d19b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2009-03-17 Jakub Jelinek + * name-lookup.c (cp_emit_debug_info_for_using): Emit USING_STMTs + instead of calling imported_module_or_decl debug hook if + building_stmt_tree (). + * cp-gimplify.c (cp_gimplify_expr): Don't assert the first operand + is a NAMESPACE_DECL. + PR debug/39471 * cp-gimplify.c (cp_gimplify_expr): Don't set DECL_NAME on IMPORTED_DECL. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 12d632b..bb12988 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -585,8 +585,7 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) if (block) { tree using_directive; - gcc_assert (TREE_OPERAND (*expr_p,0) - && NAMESPACE_DECL_CHECK (TREE_OPERAND (*expr_p, 0))); + gcc_assert (TREE_OPERAND (*expr_p, 0)); using_directive = make_node (IMPORTED_DECL); TREE_TYPE (using_directive) = void_type_node; diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index b31742c..eec7c44 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -5386,7 +5386,12 @@ cp_emit_debug_info_for_using (tree t, tree context) /* FIXME: Handle TEMPLATE_DECLs. */ for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t)) if (TREE_CODE (t) != TEMPLATE_DECL) - (*debug_hooks->imported_module_or_decl) (t, NULL_TREE, context, false); + { + if (building_stmt_tree ()) + add_stmt (build_stmt (USING_STMT, t)); + else + (*debug_hooks->imported_module_or_decl) (t, NULL_TREE, context, false); + } } #include "gt-cp-name-lookup.h" diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 79651e1..3ea14688 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -15361,6 +15361,15 @@ dwarf2out_imported_module_or_decl_1 (tree decl, dw_die_ref imported_die = NULL; dw_die_ref at_import_die; + if (TREE_CODE (decl) == IMPORTED_DECL) + { + xloc = expand_location (DECL_SOURCE_LOCATION (decl)); + decl = IMPORTED_DECL_ASSOCIATED_DECL (decl); + gcc_assert (decl); + } + else + xloc = expand_location (input_location); + if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL) { if (is_base_type (TREE_TYPE (decl))) @@ -15378,18 +15387,6 @@ dwarf2out_imported_module_or_decl_1 (tree decl, gcc_assert (at_import_die); } } - else if (TREE_CODE (decl) == IMPORTED_DECL) - { - tree imported_ns_decl = IMPORTED_DECL_ASSOCIATED_DECL (decl); - /* IMPORTED_DECL nodes that are not imported namespace are just not - supported yet. */ - gcc_assert (imported_ns_decl - && TREE_CODE (imported_ns_decl) == NAMESPACE_DECL); - at_import_die = lookup_decl_die (imported_ns_decl); - if (!at_import_die) - at_import_die = force_decl_die (imported_ns_decl); - gcc_assert (at_import_die); - } else { at_import_die = lookup_decl_die (decl); @@ -15413,10 +15410,7 @@ dwarf2out_imported_module_or_decl_1 (tree decl, } } - if (TREE_CODE (decl) == NAMESPACE_DECL - || (TREE_CODE (decl) == IMPORTED_DECL - && (TREE_CODE (IMPORTED_DECL_ASSOCIATED_DECL (decl)) - == NAMESPACE_DECL))) + if (TREE_CODE (decl) == NAMESPACE_DECL) imported_die = new_die (DW_TAG_imported_module, lexical_block_die, lexical_block); @@ -15425,10 +15419,6 @@ dwarf2out_imported_module_or_decl_1 (tree decl, lexical_block_die, lexical_block); - if (TREE_CODE (decl) == IMPORTED_DECL) - xloc = expand_location (DECL_SOURCE_LOCATION (decl)); - else - xloc = expand_location (input_location); add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file)); add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line); if (name) -- cgit v1.1