Fix copy_node of TEMPLATE_INFO.
authorJason Merrill <jason@redhat.com>
Wed, 31 Jul 2019 18:49:28 +0000 (14:49 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 31 Jul 2019 18:49:28 +0000 (14:49 -0400)
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.

* cp-tree.h (struct tree_template_info): Use tree_base instead of
tree_common.  Add tmpl and args fields.
(TI_TEMPLATE, TI_ARGS): Adjust.

From-SVN: r273943

gcc/cp/ChangeLog
gcc/cp/cp-objcp-common.c
gcc/cp/cp-tree.h

index 425eea11a7cb17b6b17a2223b12278eb847aecff..06024eb506dd9a22ef6387e06ecadfb42f3e06bf 100644 (file)
@@ -1,3 +1,10 @@
+2019-07-31  Jason Merrill  <jason@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  <mliska@suse.cz>
 
        PR tree-optimization/91270
index 21d162e5d0ccf2c4556895ad123ce164a7c34c8f..4c95180bd4b6db1a62679ba613947e14905a87d5 100644 (file)
@@ -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);
index 688924cdd12d1465f417530aec2a7956914d1d3b..c8fa29938e404dff9655fa476743d519c0b18e67 100644 (file)
@@ -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,