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