decl.c (duplicate_decls): When combining typedefs, remove the new type from the variants list.

* decl.c (duplicate_decls): When combining typedefs, remove the
	new type from the variants list.

From-SVN: r230202
This commit is contained in:
Jason Merrill 2015-11-11 20:16:59 -05:00 committed by Jason Merrill
parent c7360ed2f9
commit 9e4c469a24
2 changed files with 21 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2015-11-11 Jason Merrill <jason@redhat.com>
* decl.c (duplicate_decls): When combining typedefs, remove the
new type from the variants list.
2015-11-11 Jason Merrill <jason@redhat.com>
* pt.c (instantiate_class_template_1): Set function_depth around

View File

@ -2014,7 +2014,22 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
/* For typedefs use the old type, as the new type's DECL_NAME points
at newdecl, which will be ggc_freed. */
if (TREE_CODE (newdecl) == TYPE_DECL)
newtype = oldtype;
{
newtype = oldtype;
/* And remove the new type from the variants list. */
if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
{
tree remove = TREE_TYPE (newdecl);
for (tree t = TYPE_MAIN_VARIANT (remove); ;
t = TYPE_NEXT_VARIANT (t))
if (TYPE_NEXT_VARIANT (t) == remove)
{
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
break;
}
}
}
else
/* Merge the data types specified in the two decls. */
newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));