[PR55641] drop spurious const_type from reference_type variables
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. 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. From-SVN: r239402
This commit is contained in:
parent
8aaf799b00
commit
71e1a6a4c7
@ -1,5 +1,9 @@
|
||||
2016-08-12 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR debug/55641
|
||||
* dwarf2out.c (decl_quals): Don't map TREE_READONLY to
|
||||
TYPE_QUAL_CONST in reference-typed decls.
|
||||
|
||||
PR debug/49366
|
||||
* dwarf2out.c (loc_list_from_tree_1): Expand some CONSTRUCTORs
|
||||
in DW_OP_pieces, just enough to handle pointers to member
|
||||
|
@ -11126,6 +11126,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));
|
||||
|
@ -1,5 +1,8 @@
|
||||
2016-08-12 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR debug/55641
|
||||
* g++.dg/debug/dwarf2/ref-1.C: New.
|
||||
|
||||
PR debug/49366
|
||||
* g++.dg/debug/dwarf2/template-params-12.H: New.
|
||||
* g++.dg/debug/dwarf2/template-params-12f.C: New.
|
||||
|
19
gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
Normal file
19
gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
Normal file
@ -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) {}
|
Loading…
Reference in New Issue
Block a user