Commit 6a091e8b by Jason Merrill Committed by Jason Merrill

decl.c (grokdeclarator): Strip the injected-class-name typedef if we are…

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
parent 701bd2a2
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)
......
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>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment