On Tue, Jun 26, 2018 at 2:21 AM David Malcolm <dmalc...@redhat.com> wrote:
>
> I ran into this bootstrap failure (with r262092):
>
> ../../../src/gcc/tree-vect-loop.c: In function ‘_loop_vec_info* 
> vect_analyze_loop(loop*, loop_vec_info, vec_info_shared*)’:
> ../../../src/gcc/tree-vect-loop.c:1946:25: error: ‘n_stmts’ may be used 
> uninitialized in this function [-Werror=maybe-uninitialize ]
>    ok = vect_analyze_slp (loop_vinfo, *n_stmts);
>         ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
> ../../../src/gcc/tree-vect-loop.c:2318:12: note: ‘n_stmts’ was declared here
>    unsigned n_stmts;
>             ^~~~~~~
> cc1plus: all warnings being treated as errors
>
> It looks like it's inlining vect_analyze_loop_2 into vect_analyze_loop,
> passing &n_stmts in by pointer.
>
> Normally, vect_get_datarefs_in_loop writes:
>   *n_stmts = 0;
> when
>   if (!LOOP_VINFO_DATAREFS (loop_vinfo).exists ())
> but not in the "else" path, and then, after lots of complex logic:
>
>   ok = vect_analyze_slp (loop_vinfo, *n_stmts);
>
> it uses the value in vect_analyze_loop_2, passed in via &n_stmts.
>
> So it's not at all clear to me (or the compiler) that the value is
> initialized in all paths, and an initialization to zero seems a
> reasonable fix.
>
> OK for trunk, assuming the bootstrap succeeds this time?

I already applied the very same fix, sorry for the breakage.

Richard.

> gcc/ChangeLog:
>         * tree-vect-loop.c (vect_analyze_loop): Initialize n_stmts.
> ---
>  gcc/tree-vect-loop.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
> index dacc881..2b3ced2 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)
>      {
> --
> 1.8.5.3
>

Reply via email to