aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2017-04-05 19:10:17 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2017-04-05 19:10:17 +0000
commitd430756d2dbcc396347bd60d205ed987716b5ae8 (patch)
treea88f0920e818d5625e3a88928da6fe6af397f5f0
parent92884c107e041201b33c5d4196fe756c716e8a0c (diff)
PR c++/80309
* pt.c (canonical_type_parameter): Use vec_safe_grow_cleared instead of a loop doing vec_safe_push of NULL. Formatting fixes. (rewrite_template_parm): Copy TEMPLATE_PARM_PARAMETER_PACK from oldidx to newidx before calling canonical_type_parameter on newtype. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246717 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog8
-rw-r--r--gcc/cp/pt.c15
2 files changed, 16 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6cacac15525..9b1f89d8ccd 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+2017-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/80309
+ * pt.c (canonical_type_parameter): Use vec_safe_grow_cleared instead
+ of a loop doing vec_safe_push of NULL. Formatting fixes.
+ (rewrite_template_parm): Copy TEMPLATE_PARM_PARAMETER_PACK from oldidx
+ to newidx before calling canonical_type_parameter on newtype.
+
2017-04-04 Volker Reichelt <v.reichelt@netcologne.de>
PR c++/80296
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 24b01e70ba6..f9f4921a11a 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3997,10 +3997,10 @@ canonical_type_parameter (tree type)
tree list;
int idx = TEMPLATE_TYPE_IDX (type);
if (!canonical_template_parms)
- vec_alloc (canonical_template_parms, idx+1);
+ vec_alloc (canonical_template_parms, idx + 1);
- while (canonical_template_parms->length () <= (unsigned)idx)
- vec_safe_push (canonical_template_parms, NULL_TREE);
+ if (canonical_template_parms->length () <= (unsigned) idx)
+ vec_safe_grow_cleared (canonical_template_parms, idx + 1);
list = (*canonical_template_parms)[idx];
while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
@@ -4011,8 +4011,7 @@ canonical_type_parameter (tree type)
else
{
(*canonical_template_parms)[idx]
- = tree_cons (NULL_TREE, type,
- (*canonical_template_parms)[idx]);
+ = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
return type;
}
}
@@ -24955,6 +24954,8 @@ rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
newidx = TEMPLATE_TYPE_PARM_INDEX (newtype)
= build_template_parm_index (index, level, level,
newdecl, newtype);
+ TEMPLATE_PARM_PARAMETER_PACK (newidx)
+ = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
TYPE_STUB_DECL (newtype) = TYPE_NAME (newtype) = newdecl;
TYPE_CANONICAL (newtype) = canonical_type_parameter (newtype);
@@ -25002,11 +25003,11 @@ rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
SET_DECL_TEMPLATE_PARM_P (newconst);
newidx = build_template_parm_index (index, level, level,
newconst, newtype);
+ TEMPLATE_PARM_PARAMETER_PACK (newidx)
+ = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
DECL_INITIAL (newdecl) = DECL_INITIAL (newconst) = newidx;
}
- TEMPLATE_PARM_PARAMETER_PACK (newidx)
- = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
return newdecl;
}