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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Harald Anlauf <anl...@gcc.gnu.org>:

https://gcc.gnu.org/g:3c04bd60e56da399a441f73ebb687b5039b9cf3f

commit r11-2746-g3c04bd60e56da399a441f73ebb687b5039b9cf3f
Author: Harald Anlauf <anl...@gmx.de>
Date:   Tue Aug 18 21:48:56 2020 +0200

    PR fortran/96613,96686 - Fix type/kind issues, temporaries evaluating
MIN/MAX

    When evaluating functions of the MIN/MAX variety inline, use a temporary
    of appropriate type and kind, and convert to the result type at the end.
    In the case of allowing for the GNU extensions to MIN/MAX, derive the
    result kind consistently during simplificaton.

    Furthermore, the Fortran standard requires type and kind of arguments to
    the MIN/MAX intrinsics to all have the same type and kind.  While a GNU
    extension accepts kind differences for integer and real arguments which
    seems to have been used in legacy code, there is no reason to allow
    different character kinds.  We now reject the latter unconditionally.

    gcc/fortran/ChangeLog:

            * check.c (check_rest): Reject MIN/MAX character arguments of
            different kind.
            * simplify.c (min_max_choose): The simplification result shall
            have the highest kind value of the arguments.
            * trans-intrinsic.c (gfc_conv_intrinsic_minmax): Choose type and
            kind of intermediate by looking at all arguments, not the result.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/minmax_char_3.f90: New test.
            * gfortran.dg/min_max_kind.f90: New test.
            * gfortran.dg/pr96613.f90: New test.

Reply via email to