decl.c (grokdeclarator): Strip the injected-class-name typedef if we are building a declaration or...
* decl.c (grokdeclarator): Strip the injected-class-name typedef if we are building a declaration or compound type. From-SVN: r186346
This commit is contained in:
parent
701bd2a2cc
commit
6a091e8bd8
@ -1,5 +1,9 @@
|
||||
2012-04-11 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR debug/45088
|
||||
* decl.c (grokdeclarator): Strip the injected-class-name typedef
|
||||
if we are building a declaration or compound type.
|
||||
|
||||
PR c++/52906
|
||||
* decl.c (check_tag_decl): Don't complain about attributes if we
|
||||
don't even have a type.
|
||||
|
@ -8943,6 +8943,17 @@ grokdeclarator (const cp_declarator *declarator,
|
||||
error ("qualifiers are not allowed on declaration of %<operator %T%>",
|
||||
ctor_return_type);
|
||||
|
||||
/* If we're using the injected-class-name to form a compound type or a
|
||||
declaration, replace it with the underlying class so we don't get
|
||||
redundant typedefs in the debug output. But if we are returning the
|
||||
type unchanged, leave it alone so that it's available to
|
||||
maybe_get_template_decl_from_type_decl. */
|
||||
if (CLASS_TYPE_P (type)
|
||||
&& DECL_SELF_REFERENCE_P (TYPE_NAME (type))
|
||||
&& type == TREE_TYPE (TYPE_NAME (type))
|
||||
&& (declarator || type_quals))
|
||||
type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
|
||||
|
||||
type_quals |= cp_type_quals (type);
|
||||
type = cp_build_qualified_type_real
|
||||
(type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
|
||||
|
@ -1,5 +1,9 @@
|
||||
2012-04-11 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR debug/45088
|
||||
* g++.dg/debug/dwarf2/self-ref-1.C: Define virtual destructor.
|
||||
* g++.dg/debug/dwarf2/self-ref-1.C: Likewise.
|
||||
|
||||
PR c++/52906
|
||||
* g++.dg/ext/attrib45.C: New.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
struct A
|
||||
{
|
||||
virtual ~A();
|
||||
virtual ~A(){}
|
||||
};
|
||||
|
||||
struct B : public A
|
||||
|
@ -6,7 +6,7 @@
|
||||
template<class T>
|
||||
struct A
|
||||
{
|
||||
virtual ~A();
|
||||
virtual ~A(){}
|
||||
};
|
||||
|
||||
struct B : public A<int>
|
||||
|
Loading…
Reference in New Issue
Block a user