From a01d3b0481fe250079e730eb20cd534d6f52ff73 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 28 May 2019 17:04:12 +0000 Subject: [PATCH] [C++ PATCH] template specializations https://gcc.gnu.org/ml/gcc-patches/2019-05/msg01844.html * decl.c (duplicate_decls): Assert a template newdecl has no specializations. From-SVN: r271713 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 36a415d9174..0552d913820 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-05-28 Nathan Sidwell + + * decl.c (duplicate_decls): Assert a template newdecl has no + specializations. + 2019-05-28 Marek Polacek PR c++/90548 - ICE with generic lambda and empty pack. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5b22f65ec8d..2bb50e47478 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -2025,9 +2025,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) tree old_result = DECL_TEMPLATE_RESULT (olddecl); tree new_result = DECL_TEMPLATE_RESULT (newdecl); TREE_TYPE (olddecl) = TREE_TYPE (old_result); - DECL_TEMPLATE_SPECIALIZATIONS (olddecl) - = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl), - DECL_TEMPLATE_SPECIALIZATIONS (newdecl)); + + /* The new decl should not already have gathered any + specializations. */ + gcc_assert (!DECL_TEMPLATE_SPECIALIZATIONS (newdecl)); DECL_ATTRIBUTES (old_result) = (*targetm.merge_decl_attributes) (old_result, new_result);