diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-12 01:16:59 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-12 01:16:59 +0000 |
commit | ccb738ec9d63ce6a189b5795973ae014d82cc3b9 (patch) | |
tree | 7250a3da17005c2fab0587043c0dbd9b898a632a | |
parent | 95521921a06ddaf9686e3a9c17dcf5fbd2d33a56 (diff) | |
download | gcc-ccb738ec9d63ce6a189b5795973ae014d82cc3b9.tar.gz |
* decl.c (duplicate_decls): When combining typedefs, remove the
new type from the variants list.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230202 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 17 |
2 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9cbda291ac7..d1bf1219e00 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 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 instantiation of lambda op(). diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 76cc1d176e5..383b47d29ed 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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)); |