[PATCH, FORTRAN] matchexp.c: Fix possible false positive of uninitialized variable usage e
Stefan Schulze Frielinghaus
stefansf@linux.ibm.com
Tue Jun 2 11:00:02 GMT 2020
Ping
On Tue, May 19, 2020 at 08:33:24AM +0200, Stefan Schulze Frielinghaus via Gcc-patches wrote:
> While bootstrapping GCC on S/390 the following warning is raised:
>
> gcc/fortran/matchexp.c: In function 'match match_level_5(gfc_expr**)':
> gcc/fortran/matchexp.c:401:18: error: 'e' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> 401 | gfc_free_expr (e);
> | ~~~~~~~~~~~~~~^~~
> /home/stefansf/devel/gcc/src/gcc/fortran/matchexp.c:353:19: note: 'e' was declared here
> 353 | gfc_expr *all, *e, *total;
> | ^
>
> In function match_add_operand local variable e gets initialised via
> function match_ext_mult_operand if it returns MATCH_YES. In case of the
> remaining two return values MATCH_NO and MATCH_ERROR the current
> function call is terminated before e may be used. Thus this
> warning/error seems to be a false positive analogous to variable e in
> function match_mult_operand. Interestingly this warning may be silenced
> by initialising variable e of either function match_level_5 or
> match_add_operand. Since both variables are unrelated and correspond to
> different functions, this endorses the suspicion of a false positive.
>
> Silenced the warning by initializing variable e of function
> match_add_operand.
>
> Bootstrapped and regtested on S/390. Ok for master?
>
> gcc/fortran/ChangeLog:
>
> 2020-05-04 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com>
>
> * matchexp.c (match_add_operand): Initialize local variable e.
> ---
> gcc/fortran/matchexp.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/fortran/matchexp.c b/gcc/fortran/matchexp.c
> index 6479582d75b..25e675f3d45 100644
> --- a/gcc/fortran/matchexp.c
> +++ b/gcc/fortran/matchexp.c
> @@ -348,7 +348,9 @@ match_ext_mult_operand (gfc_expr **result)
> static match
> match_add_operand (gfc_expr **result)
> {
> - gfc_expr *all, *e, *total;
> + /* Workaround -Wmaybe-uninitialized false positive by initializing variable
> + e. */
> + gfc_expr *all, *e = NULL, *total;
> locus where, old_loc;
> match m;
> gfc_intrinsic_op i;
> --
> 2.25.3
>
More information about the Gcc-patches
mailing list