[patch, fortran] Warning for feal / complex equality / inequality comparisons

Tobias Burnus burnus@net-b.de
Sun Aug 19 12:35:00 GMT 2012


Thomas Koenig wrote:
> the attached patch warns about comparisions for equality and inequality
> of real and complex values if -Wcompare-reals is given. The new
> compiler option is included in -Wall.
>
> Regression-tested, tested with "make info" and "make dvi".
> OK for trunk?

Thanks for the patch. It's okay, after fixing the nits below.

> +	  if (gfc_option.warn_compare_reals)
> +	    {
> +	      gfc_intrinsic_op op = e->value.op.op;
> +	
> +	      if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
> +		  && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
> +		      || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
> +		{
> +		  bool equality;
> +
> +		  equality = op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS;
> +		
> +		  /* Type conversion has made sure that the types
> +		     of op1 and op2 agree.  */
> +		  gfc_warning ("%s comparison for %s at %L",
> +			       equality ? "Equality" : "Inequality",
> +			       gfc_typename (&op1->ts), &op1->where);

Can you move up the comment before the "(op1->ts.type"? When reading the 
patch, I stumbled over that, before reading 8 lines later that checking 
op1 is sufficient.

Additionally, your gfc_warning is rather unfriendly to translators (try 
yourself to translate it, taking into account that the "Equality" string 
might be re-used elsewhere). I think it is better to have two separate 
strings, one for equality and one for inequality.

Tobias



More information about the Fortran mailing list