tree-optimization/99947 - avoid v.safe_push (v[0])
This avoids (again) the C++ pitfall of pushing a reference to sth being reallocated. 2021-04-07 Richard Biener <rguenther@suse.de> PR tree-optimization/99947 * tree-vect-loop.c (vectorizable_induction): Pre-allocate steps vector to avoid pushing elements from the reallocated vector. * gcc.dg/torture/pr99947.c: New testcase.
This commit is contained in:
parent
6eaf7ac6f4
commit
d11bcbe166
18
gcc/testsuite/gcc.dg/torture/pr99947.c
Normal file
18
gcc/testsuite/gcc.dg/torture/pr99947.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
int a, b, d, e;
|
||||
short c;
|
||||
void f() {
|
||||
for (; e; e++) {
|
||||
int g = 6;
|
||||
for (; g > 2; g--) {
|
||||
int i = -8;
|
||||
while (i < 20) {
|
||||
i += 5;
|
||||
a += b;
|
||||
}
|
||||
c *= d;
|
||||
}
|
||||
b--;
|
||||
}
|
||||
}
|
@ -8202,11 +8202,12 @@ vectorizable_induction (loop_vec_info loop_vinfo,
|
||||
/* Fill up to the number of vectors we need for the whole group. */
|
||||
nivs = least_common_multiple (group_size,
|
||||
const_nunits) / const_nunits;
|
||||
vec_steps.reserve (nivs-ivn);
|
||||
for (; ivn < nivs; ++ivn)
|
||||
{
|
||||
SLP_TREE_VEC_STMTS (slp_node)
|
||||
.quick_push (SLP_TREE_VEC_STMTS (slp_node)[0]);
|
||||
vec_steps.safe_push (vec_steps[0]);
|
||||
vec_steps.quick_push (vec_steps[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user