[pushed] dwarf2: Set DW_AT_declaration for undefined fns [PR97060]

Jason Merrill jason@redhat.com
Thu Nov 12 05:56:43 GMT 2020


If DECL_INITIAL isn't set, we can't emit anything about the body of the
function, so add the declaration attribute.

Tested x86_64-pc-linux-gnu, applying to trunk.

gcc/ChangeLog:

	PR debug/97060
	* dwarf2out.c (gen_subprogram_die): It's a declaration
	if DECL_INITIAL isn't set.

gcc/testsuite/ChangeLog:

	PR debug/97060
	* gcc.dg/debug/dwarf2/pr97060.c: New test.
---
 gcc/dwarf2out.c                             |  1 +
 gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c | 13 +++++++++++++
 2 files changed, 14 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index bc32a17efcd..a5aaa6c34da 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -22849,6 +22849,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
           available.
   */
   int declaration = (current_function_decl != decl
+		     || (!DECL_INITIAL (decl) && !origin)
 		     || class_or_namespace_scope_p (context_die));
 
   /* A declaration that has been previously dumped needs no
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c
new file mode 100644
index 00000000000..c07b9046d9a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c
@@ -0,0 +1,13 @@
+/* PR debug/97060 */
+/* { dg-do compile } */
+/* { dg-options "-g -dA" } */
+/* { dg-final { scan-assembler-times "DW_AT_declaration" 2 } } */
+
+extern int foo (unsigned int, unsigned int);
+
+int
+bar (void)
+{
+  foo (1, 2);
+  return 0;
+}

base-commit: 7a9a5d1a61c7b8111557261a8d275a531812b50e
-- 
2.18.4



More information about the Gcc-patches mailing list