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:
parent
c7360ed2f9
commit
9e4c469a24
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue