diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-04-05 19:10:17 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-04-05 19:10:17 +0000 |
commit | d430756d2dbcc396347bd60d205ed987716b5ae8 (patch) | |
tree | a88f0920e818d5625e3a88928da6fe6af397f5f0 | |
parent | 92884c107e041201b33c5d4196fe756c716e8a0c (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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/pt.c | 15 |
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; } |