[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