OK.

On Mon, Aug 1, 2016 at 11:12 PM, Alexandre Oliva <aol...@redhat.com> wrote:
> Although C++ reference types, denoted by DW_TAG_reference_type in
> DWARFv2+ debug info, are unchangeable, we output names of reference type
> with DW_TAG_const_type, because internally we mark such variables as
> TREE_READONLY.  That's an internal implementation detail that shouldn't
> leak to debug information.  This patch fixes this.
>
> The testcase is slightly changed from the one attached to the bug
> report, so that it runs in C++98 mode too.
>
> Regstrapped on x86_64-linux-gnu and i686-linux-gnu.  Ok to install?
>
> for  gcc/ChangeLog
>
>         PR debug/55641
>         * dwarf2out.c (decl_quals): Don't map TREE_READONLY to
>         TYPE_QUAL_CONST in reference-typed decls.
>
> for  gcc/testsuite/ChangeLog
>
>         PR debug/55641
>         * g++.dg/debug/dwarf2/ref-1.C: New.
> ---
>  gcc/dwarf2out.c                           |    4 ++++
>  gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C |   19 +++++++++++++++++++
>  2 files changed, 23 insertions(+)
>  create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
>
> diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
> index 8d6eeed..103095f 100644
> --- a/gcc/dwarf2out.c
> +++ b/gcc/dwarf2out.c
> @@ -11135,6 +11135,10 @@ static int
>  decl_quals (const_tree decl)
>  {
>    return ((TREE_READONLY (decl)
> +          /* The C++ front-end correctly marks reference-typed
> +             variables as readonly, but from a language (and debug
> +             info) standpoint they are not const-qualified.  */
> +          && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
>            ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
>           | (TREE_THIS_VOLATILE (decl)
>              ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
> diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C 
> b/gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
> new file mode 100644
> index 0000000..75e9fca
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
> @@ -0,0 +1,19 @@
> +// { dg-do compile }
> +// { dg-options "-O -g -dA -gno-strict-dwarf" }
> +// { dg-final { scan-assembler-not "DW_TAG_const_type" { xfail { 
> powerpc-ibm-aix* } } } }
> +
> +int x;
> +int &y = x;
> +
> +typedef int &z_t;
> +z_t z = x;
> +
> +void f(int &p) {}
> +
> +struct foo {
> +  int &bar;
> +  typedef int &bart;
> +  bart fool;
> +};
> +
> +void f3(struct foo &p) {}
>
> --
> Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
> You must be the change you wish to see in the world. -- Gandhi
> Be Free! -- http://FSFLA.org/   FSF Latin America board member
> Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

Reply via email to