Re: [PATCH] PR fortran/92018 -- BOZ the gift that keeps giving

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] PR fortran/92018 -- BOZ the gift that keeps giving

Janne Blomqvist-3
On Wed, Oct 9, 2019 at 2:14 AM Steve Kargl
<[hidden email]> wrote:

>
> Tested on x86_64-*-freebsd.  OK to commit?
>
> A BOZ literal constant can be an actual argument in a
> very limited number of intrinsic subprograms.  For those
> intrinsics subprograms, the BOZ literal constant is converted
> either during checking (see check.c) or simplification
> (see simplify.c).  In resolve.c (resolve_function), I added
> code that would walk the actual argument list to check for a
> BOZ, but that code was restricted to functions with the EXTERNAL
> attribute.
>
> The new testcase, pr92018.f90, demonstrates a situation
> when neither the INTRINSIC and EXTERNAL attribute is set,
> and the actual argument list contains BOZ.  This led to
> an ICE.  The patch removes the previous restriction, and
> so the actual arguments for all functions are checked.
> This works except it pointed to a deficiency in the checking
> routines.  If something was rejected, (e.g., IAND(Z'12',Z34')),
> the BOZ were passed onto resolve_function() and run-on errors
> were reported.  To avoid these additional error messages, I have
> added the reset_boz() function, which converts a rejected
> BOZ to a default integer kind 0.
>
> 2019-10-09  Steven G. Kargl  <[hidden email]>
>
>         PF fortran/92018
>         * check.c (reset_boz): New function.
>         (illegal_boz_arg, boz_args_check, gfc_check_complex, gfc_check_float,
>         gfc_check_transfer): Use it.
>         (gfc_check_dshift): Use reset_boz, and re-arrange the checking to
>         help suppress possible run-on errors.
>         (gfc_check_and): Restore checks for valid argument types.  Use
>         reset_boz, and re-arrange the checking to help suppress possible
>         run-on errors.
>         * resolve.c (resolve_function): Actual arguments cannot be BOZ in
>         a function reference.
>
> 2019-10-09  Steven G. Kargl  <[hidden email]>
>
>         PF fortran/92018
>         * gfortran.dg/gnu_logical_2.f90: Update dg-error regex.
>         * gfortran.dg/pr81509_2.f90: Ditto.
>         * gfortran.dg/pr92018.f90: New test.
>
> --
> Steve

Ok.

--
Janne Blomqvist