https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64137

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu.org

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> -  if (op == GT_EXPR && expr->ts.type == BT_INTEGER)
> +  if (op == GT_EXPR && arrayexpr->ts.type == BT_INTEGER)
> works for me.

Looks good to me.  Thanks for the patch and debugging!


[Seems to be a copy'n'paste error from gfc_conv_intrinsic_minmaxval, which
returns the value (= int or float) such that expr->ts.type works; the code in
gfc_conv_intrinsic_minmaxloc return a location which is always an int.]



> So I suppose this is a wrong-code bug as we shouldn't have
> subtracted 1 off -Huge (what's that anyway?)  But then is "integer -Huge"
> C INT_MIN + 1?

HUGE(variable)  is a function which returns the largest possible value for that
variable, i.e. MAX_INT for a default-kind integer or FLT_MAX for a default-kind
real variable.

For MAXLOC, one starts with "val = <smallest possible value>", which is MIN_INT
== -MAX_INT - 1 == -HUGE() - 1 for int or FLT_MIN == -HUGE() for real with
-ffinite-math or otherwise -INF for reals.

Reply via email to