build_clone uses copy_node to duplicate the TEMPLATE_INFO for a clone, but this clears TREE_CHAIN, which was TI_ARGS in a TEMPLATE_INFO.
Tested x86_64-pc-linux-gnu, applying to trunk. * cp-tree.h (struct tree_template_info): Use tree_base instead of tree_common. Add tmpl and args fields. (TI_TEMPLATE, TI_ARGS): Adjust. --- gcc/cp/cp-tree.h | 10 +++++++--- gcc/cp/cp-objcp-common.c | 1 - gcc/cp/ChangeLog | 7 +++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 688924cdd12..c8fa29938e4 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1437,7 +1437,9 @@ typedef struct qualified_typedef_usage_s qualified_typedef_usage_t; (TREE_LANG_FLAG_1 (TEMPLATE_INFO_CHECK (NODE))) struct GTY(()) tree_template_info { - struct tree_common common; + struct tree_base base; + tree tmpl; + tree args; vec<qualified_typedef_usage_t, va_gc> *typedefs_needing_access_checking; }; @@ -3420,8 +3422,10 @@ struct GTY(()) lang_decl { ? (TYPE_LANG_SLOT_1 (NODE) = (VAL)) \ : (DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) = (VAL))) -#define TI_TEMPLATE(NODE) TREE_TYPE (TEMPLATE_INFO_CHECK (NODE)) -#define TI_ARGS(NODE) TREE_CHAIN (TEMPLATE_INFO_CHECK (NODE)) +#define TI_TEMPLATE(NODE) \ + ((struct tree_template_info*)TEMPLATE_INFO_CHECK (NODE))->tmpl +#define TI_ARGS(NODE) \ + ((struct tree_template_info*)TEMPLATE_INFO_CHECK (NODE))->args #define TI_PENDING_TEMPLATE_FLAG(NODE) \ TREE_LANG_FLAG_1 (TEMPLATE_INFO_CHECK (NODE)) /* For a given TREE_VEC containing a template argument list, diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index 21d162e5d0c..4c95180bd4b 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -373,7 +373,6 @@ cp_common_init_ts (void) MARK_TS_COMMON (TEMPLATE_TYPE_PARM); MARK_TS_COMMON (TEMPLATE_PARM_INDEX); MARK_TS_COMMON (OVERLOAD); - MARK_TS_COMMON (TEMPLATE_INFO); MARK_TS_COMMON (TYPENAME_TYPE); MARK_TS_COMMON (TYPEOF_TYPE); MARK_TS_COMMON (UNDERLYING_TYPE); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 425eea11a7c..06024eb506d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2019-07-31 Jason Merrill <ja...@redhat.com> + + Fix copy_node of TEMPLATE_INFO. + * cp-tree.h (struct tree_template_info): Use tree_base instead of + tree_common. Add tmpl and args fields. + (TI_TEMPLATE, TI_ARGS): Adjust. + 2019-07-30 Martin Liska <mli...@suse.cz> PR tree-optimization/91270 base-commit: c9b21954f008e76123a4b79d416ce273cb749cc5 -- 2.21.0