Hi Andre,

Thanks for the review - I'll act on the points that you raised.

The Linaro people reported a failure in reduce_1.f90 execution, which I
believe is due to incorrect casting of 'dim' and a wrong specification of
its kind. I am waiting to hear back from them as to whether or not I have
fixed the failure.

Cheers

Paul


On Wed, 19 Mar 2025 at 12:39, Andre Vehreschild <ve...@gmx.de> wrote:

> Hi Paul,
>
> I took a look at your patch and think I found some improvements needed. In
>
> +bool
> +gfc_check_reduce (gfc_expr *array, gfc_expr *operation, gfc_expr *dim,
> +                 gfc_expr *mask, gfc_expr *identity, gfc_expr *ordered)
> +{
>
> ...
>
> +  if (formal->sym->attr.allocatable || formal->sym->attr.allocatable
> +      || formal->sym->attr.pointer || formal->sym->attr.pointer
> +      || formal->sym->attr.optional || formal->sym->attr.optional
> +      || formal->sym->ts.type == BT_CLASS || formal->sym->ts.type ==
> BT_CLASS)
> +    {
> +      gfc_error ("Each argument of OPERATION at %L shall be a scalar, "
> +                "non-allocatable, non-pointer, non-polymorphic and "
> +                "nonoptional", &operation->where);
> +      return false;
> +    }
>
> The if is only looking at the first formal argument. The right-hand sides
> of the || miss a ->next-> to look at the second formal argument, right?
>
> May be you also want to extend the tests!?
>
> Without having looked at it, but can't you extract the whole block of
>
> +  if (array->ts.type == BT_CHARACTER)
> +    {
> +      unsigned long actual_size, formal_size1, formal_size2, result_size;
> ...
> +         return false;
> +       }
> +    }
>
> and share it with the checks for co_reduce? I figure way to many DRY
> principle
> violations are in gfortran. So when we can start this, why not do it? And a
> call to a routine, like check_char_arg_conformance() speaks way better,
> then
> having to read all that code ;-)
>
> In gfc_resolve_reduce() identity and ordered are marked as UNUSED. Should
> these
> not a least be resolved?
>
> Please run contrib/check_GNU_style on your patch. It reports several issues
> (haven't look into their validity).
>
> In the Changelog:
>
> -       (gfc_check_rename): Add prototype for intrinsic with 6 arguments.
> +       * gfortran.h: Add prototype for intrinsic with 6 arguments.
>
> s/discription/description/
>
> I also encountered that nit with the executable stack when working in
> OpenCoarrays, but haven't had time (or desire) to look into it. I will put
> myself into CC of the pr Jerry mentioned.
>
> Besides the mentions above, this looks good to me.
>
> Thanks for the patch and
>
> Regards,
>         Andre
>
>
>
> On Sun, 16 Mar 2025 17:26:55 +0000
> Paul Richard Thomas <paul.richard.tho...@gmail.com> wrote:
>
> > Hi All,
> >
> > This version of the REDUCE intrinsic patch has evolved somewhat since the
> > posting on 2nd March. The most important changes are to the wrapper
> > function and the addition of two testsuite entries.
> >
> > The wrapper function now effects:
> >     subroutine wrapper (a, b, c)
> >          type_of_ARRAY, intent(inout) :: a, c
> >          type_of_ARRAY, intent(inout), optional :: b
> >          if (present (b)) then
> >             c = OPERATION (a,b )
> >          else
> >             c = a
> >          end if
> >     end subroutine
> >
> > The reason for wrapping OPERATION in a subroutine is to allow pointer
> > arithmetic to be used throughout in the library function. The only thing
> > that needs to be known about the type and kind of ARRAY is the element
> > size. The second branch in the wrapper allows deep copies to be done in
> the
> > library function, such that derived types with allocatable components do
> > not leak memory. This is needed at the final step of the algorithm to
> copy
> > the result from each iteration to the result and then nullify it.
> >
> > This is undoubtedly a bit heavy going for intrinsic types and so, one day
> > soon I will possibly do a bit of M4ery. That said, the present version
> > works for all types of ARRAY and I worry a bit about how much this
> > intrinsic will be used. Thoughts?
> >
> > A slight niggle is the linker error that comes up if compiled without any
> > optimization:
> > /usr/bin/ld: warning: /tmp/cc9cx9Rw.o: requires executable stack (because
> > the .note.GNU-stack section is executable)
> > I think that this is unlikely to present a security issue, however, since
> > it disappears at -O1, I went through each of the options triggered by -O1
> > but couldn't make it go away. Does anybody know why this is?
> >
> > Regtests OK with FC41/x86_64 - OK for mainline?
> >
> > Regards
> >
> > Paul
>
>
> --
> Andre Vehreschild * Email: vehre ad gmx dot de
>

Reply via email to