On Tue, Apr 28, 2020 at 11:28 AM Stefan Schulze Frielinghaus via
Gcc-patches <[email protected]> wrote:
>
> While bootstrapping GCC on S/390 the following warning/error is raised:
>
> gcc/var-tracking.c:10239:34: error: 'pre' may be used uninitialized in this
> function [-Werror=maybe-uninitialized]
> 10239 | VTI (bb)->out.stack_adjust += pre;
> | ^
>
> The lines of interest are:
>
> HOST_WIDE_INT pre, post = 0;
> // ...
> if (!frame_pointer_needed)
> {
> insn_stack_adjust_offset_pre_post (insn, &pre, &post);
> // ...
> }
>
> // ...
> adjust_insn (bb, insn);
>
> if (!frame_pointer_needed && pre)
> VTI (bb)->out.stack_adjust += pre;
>
> Both if statements depend on global variable frame_pointer_needed. In
> function
> insn_stack_adjust_offset_pre_post local variable pre is initialized. The
> problematic part is the function call between both if statements. Since
> adjust_insn also calls functions which are defined in a different compilation
> unit, we are not able to prove that global variable frame_pointer_needed is
> not
> altered by adjust_insn and its siblings. Thus we must assume that
> frame_pointer_needed may be true before the call and false afterwards which
> renders the warning true (admitted the location hint is not totally perfect).
> By initialising pre we silence the warning.
>
> Bootstrapped and regtested on S/390. Ok for master?
I think even better would be to move the pre declaration inside
FOR_BB_INSNS_SAFE (bb, insn, next)
{
if (INSN_P (insn))
{
initialized with zero and then elide the !frame_pointer_needed part
of
if (!frame_pointer_needed && pre)
can you check that works? OK if it does.
Btw, does s390 have different inlining parameters somehow?
Richard.
> gcc/ChangeLog:
>
> 2020-04-28 Stefan Schulze Frielinghaus <[email protected]>
>
> * var-tracking.c (vt_initialize): Initialize local variable pre.
> ---
> gcc/var-tracking.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
> index 0d39326aa63..f693a4f83fe 100644
> --- a/gcc/var-tracking.c
> +++ b/gcc/var-tracking.c
> @@ -10171,7 +10171,7 @@ vt_initialize (void)
> FOR_EACH_BB_FN (bb, cfun)
> {
> rtx_insn *insn;
> - HOST_WIDE_INT pre, post = 0;
> + HOST_WIDE_INT pre = 0, post = 0;
> basic_block first_bb, last_bb;
>
> if (MAY_HAVE_DEBUG_BIND_INSNS)
> --
> 2.25.3
>