On Thu, 12 Nov 2020 at 06:56, Jason Merrill via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> 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.

The new test fails on arm / aarch64, at least on the gcc-10 branch.
Can you check?

Thanks

> ---
>  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
>

Reply via email to