From 7e8000b39638b4a68d16770b46b5f73d36539edc Mon Sep 17 00:00:00 2001 From: Pierre-Marie de Rodat Date: Wed, 5 Oct 2016 07:53:37 +0000 Subject: [PATCH] DWARF: move pessimistic DWARF version checks for imported entities A check in dwarf2out_imported_module_or_decl prevents DW_TAG_imported_module from being emitted as it was introduced in the DWARFv3 standard. However, this also prevents valid strict DWARFv2 constructs such as DW_TAG_imported_declaration from being emitted in dwarf2out_imported_module_or_decl_1. The latter already protects the emission of newer DWARF tags with appropriate checks, so the one in the former is redundant and pessimistic. This function is already called from places like process_scope_var, which are not protected anyway. This patch moves the check in dwarf2out_imported_module_or_decl so that in strict DWARFv2 mode, tags like DW_TAG_imported_declaration are emitted while DW_TAG_imported_module are not. gcc/ * dwarf2out.c (dwarf2out_imported_module_or_decl): Move DWARF version check to protect only DW_TAG_imported_module generation. gcc/testsuite/ * gnat.dg/debug7.adb, gnat.dg/debug7.ads: New testcase. From-SVN: r240772 --- gcc/ChangeLog | 5 +++++ gcc/dwarf2out.c | 8 +++++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/debug7.adb | 10 ++++++++++ gcc/testsuite/gnat.dg/debug7.ads | 4 ++++ 5 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/debug7.adb create mode 100644 gcc/testsuite/gnat.dg/debug7.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a65f491b3ee..34efb7c5428 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-10-05 Pierre-Marie de Rodat + + * dwarf2out.c (dwarf2out_imported_module_or_decl): Move DWARF + version check to protect only DW_TAG_imported_module generation. + 2016-10-05 Richard Biener PR middle-end/55152 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 7b5acda5f7c..23eaebcc370 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -24045,13 +24045,15 @@ dwarf2out_imported_module_or_decl (tree decl, tree name, tree context, && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE)) return; - if (!(dwarf_version >= 3 || !dwarf_strict)) - return; - scope_die = get_context_die (context); if (child) { + /* DW_TAG_imported_module was introduced in the DWARFv3 specification, so + there is nothing we can do, here. */ + if (dwarf_version < 3 && dwarf_strict) + return; + gcc_assert (scope_die->die_child); gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module); gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e77ed889553..0280ff0e0a5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-10-05 Pierre-Marie de Rodat + + * gnat.dg/debug7.adb, gnat.dg/debug7.ads: New testcase. + 2016-10-05 Richard Biener PR middle-end/55152 diff --git a/gcc/testsuite/gnat.dg/debug7.adb b/gcc/testsuite/gnat.dg/debug7.adb new file mode 100644 index 00000000000..cdaf0891b80 --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug7.adb @@ -0,0 +1,10 @@ +-- { dg-do compile } +-- { dg-options "-cargs -g -gdwarf-2 -gstrict-dwarf -dA -margs" } +-- { dg-final { scan-assembler "DW_TAG_imported_decl" } } + +package body Debug7 is + function Next (I : Integer) return Integer is + begin + return I + 1; + end Next; +end Debug7; diff --git a/gcc/testsuite/gnat.dg/debug7.ads b/gcc/testsuite/gnat.dg/debug7.ads new file mode 100644 index 00000000000..047d4a6635f --- /dev/null +++ b/gcc/testsuite/gnat.dg/debug7.ads @@ -0,0 +1,4 @@ +package Debug7 is + function Next (I : Integer) return Integer; + function Renamed_Next (I : Integer) return Integer renames Next; +end Debug7; -- 2.30.2