diff options
author | Richard Biener <rguenther@suse.de> | 2018-06-26 06:42:46 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-06-26 06:42:46 +0000 |
commit | 9ae91886f6a59fbcba0559299e170ee82fa592cb (patch) | |
tree | bb66c56c1cb07553283713a12b2fc0d3ee52b7dc /gcc | |
parent | 7d0c13523ca0896a160881c9701b020172fb67fd (diff) | |
download | gcc-9ae91886f6a59fbcba0559299e170ee82fa592cb.zip gcc-9ae91886f6a59fbcba0559299e170ee82fa592cb.tar.gz gcc-9ae91886f6a59fbcba0559299e170ee82fa592cb.tar.bz2 |
re PR tree-optimization/86287 (AddressSanitizer: heap-use-after-free on bootstrap with -O3)
2018-06-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/86287
PR bootstrap/86316
* tree-vect-loop.c (vect_transform_loop_stmt): Fix read-after-free.
(vect_analyze_loop): Initialize n_stmts.
From-SVN: r262132
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 342c69b..ec68212 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2018-06-26 Richard Biener <rguenther@suse.de> + PR tree-optimization/86287 + PR bootstrap/86316 + * tree-vect-loop.c (vect_transform_loop_stmt): Fix read-after-free. + (vect_analyze_loop): Initialize n_stmts. + +2018-06-26 Richard Biener <rguenther@suse.de> + PR middle-end/86271 * fold-const.c (fold_convertible_p): Pointer extension isn't valid. diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index dacc881..615b6bb 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -2315,7 +2315,7 @@ vect_analyze_loop (struct loop *loop, loop_vec_info orig_loop_vinfo, return NULL; } - unsigned n_stmts; + unsigned n_stmts = 0; poly_uint64 autodetected_vector_size = 0; while (1) { @@ -8342,8 +8342,9 @@ vect_transform_loop_stmt (loop_vec_info loop_vinfo, gimple *stmt, /* SLP. Schedule all the SLP instances when the first SLP stmt is reached. */ - if (STMT_SLP_TYPE (stmt_info)) + if (slp_vect_type slptype = STMT_SLP_TYPE (stmt_info)) { + if (!*slp_scheduled) { *slp_scheduled = true; @@ -8354,7 +8355,7 @@ vect_transform_loop_stmt (loop_vec_info loop_vinfo, gimple *stmt, } /* Hybrid SLP stmts must be vectorized in addition to SLP. */ - if (PURE_SLP_STMT (stmt_info)) + if (slptype == pure_slp) return; } |