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.
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.