Hi Harald,

thank you very much for ok'ing this large patch. Merged as
gcc-15-1965-ge4f2f46e015

Looking forward to get (no) bug reports ;-)

Thanks again,

Andre

On Wed, 10 Jul 2024 20:52:37 +0200
Harald Anlauf <anl...@gmx.de> wrote:

> Hi Andre,
>
> Am 10.07.24 um 10:45 schrieb Andre Vehreschild:
> > Hi Harald,
> >
> > thanks for the review. I totally agree, that this patch has gotten
> > bigger than I expected (and wanted). But things are as they are.
> >
> > About the coding style: I have worked in so many projects, that I
> > consider a consistent coding style luxury. I esp. do not have my
> > own one anymore. The formating you are seeing in my patches is the
> > result of clang-format with the provided parameter file in
> > contrib/clang-format. I was happy to have a tool to do the
> > formatting, that I could integrate into my IDE, because previously
> > it was hard to mimic the GNU style. I try to get to the GNU style
> > as good as possible, where I consider clang-format doing garbage.
> >
> > I see that clang-format has a "very specific opinion" on how to
> > format the lines you mentioned, but it will "correct" them any time
> > I change them and touch them later. I now have forbidden
> > clang-format to touch the code lines, but this means to add
> > formatter specific comments. Is this ok?
>
> yes, this is much better now!  Thanks.
>
> (I entirely rely on Emacs' formatting when working with C.  Sometimes
> the indentation at first may appear unexpected, but in most of these
> cases I find that it helps to just use explicit parentheses to
> convince Emacs.  This is documented.)
>
> > About the assumed size arrays, that was a small change and is added
> > now.
>
> Great!
>
> > Note, the runtime part of the patch (pr96992_3p1.patch) did not
> > change and is therefore not updated.
> >
> > Regtests ok on x86_64-pc-linux-gnu/Fedora 39. Ok for mainline?
>
> Yes, this is OK now.
>
> Thanks for the patch and your patience ;-)
>
> Harald
>
>
> > Regards,
> >     Andre
> >
> > On Fri, 5 Jul 2024 22:10:16 +0200
> > Harald Anlauf <anl...@gmx.de> wrote:
> >
> >> Hi Andre,
> >>
> >> Am 03.07.24 um 12:58 schrieb Andre Vehreschild:
> >>> Hi Harald,
> >>>
> >>> I am sorry for the long delay, but fixing the negative stride
> >>> lead from one issue to the next. I finally got a version that
> >>> does not regress. Please have a look.
> >>>
> >>> This patch has two parts:
> >>> 1. The runtime library part in pr96992_3p1.patch and
> >>> 2. the compiler changes in pr96992_3p2.patch.
> >>>
> >>> In my branch also the two patches from Paul for pr59104 and
> >>> pr102689 are living, which might lead to small shifts during
> >>> application of the patches.
> >>>
> >>> NOTE, this patch adds internal packing and unpacking of class
> >>> arrays similar to the regular pack and unpack. I think this is
> >>> necessary, because the regular un-/pack does not use the vptr's
> >>> _copy routine for moving data and therefore may produce bugs.
> >>>
> >>> The un-/pack_class routines are yet only used for converting a
> >>> derived type array to a class array. Extending their use when a
> >>> UN-/PACK() is applied on a class array is still to be done (as
> >>> part of another PR).
> >>>
> >>> Regtests fine on x86_64-pc-linux-gnu/ Fedora 39.
> >>
> >> this is a really huge patch to review, and I am not sure that I
> >> can do this without help from others.  Paul?  Anybody else?
> >>
> >> As far as I can tell for now:
> >>
> >> - pr96992_3p1.patch (the libgfortran part) looks good to me.
> >>
> >> - git had some whitespace issues with pr96992_3p2.patch as
> >> attached, but I could fix that locally and do some testing
> >> parallel to reading.
> >>
> >> A few advance comments on the latter patch:
> >>
> >> - my understanding is that the PR at the end of a summary line
> >> should be like in:
> >>
> >> Fortran: Fix rejecting class arrays of different ranks as storage
> >> association argument [PR96992]
> >>
> >>     I was told that this helps people explicitly scanning for the
> >> PR number in that place.
> >>
> >> - some rewrites of logical conditions change the coding style from
> >>     what it recommended GNU coding style, and I find the more
> >> compact way used in some places harder to grok (but that may be
> >> just me). Example:
> >>
> >> @@ -8850,20 +8857,24 @@ gfc_conv_array_parameter (gfc_se * se,
> >> gfc_expr
> >> * expr, bool g77,
> >>      /* There is no need to pack and unpack the array, if it is
> >> contiguous and not a deferred- or assumed-shape array, or if it is
> >> simply contiguous.  */
> >> -  no_pack = ((sym && sym->as
> >> -            && !sym->attr.pointer
> >> -            && sym->as->type != AS_DEFERRED
> >> -            && sym->as->type != AS_ASSUMED_RANK
> >> -            && sym->as->type != AS_ASSUMED_SHAPE)
> >> -                ||
> >> -       (ref && ref->u.ar.as
> >> -            && ref->u.ar.as->type != AS_DEFERRED
> >> +  no_pack = false;
> >> +  gfc_array_spec *as;
> >> +  if (sym)
> >> +    {
> >> +      symbol_attribute *attr
> >> +  = &(IS_CLASS_ARRAY (sym) ? CLASS_DATA (sym)->attr :
> >> sym->attr);
> >> +      as = IS_CLASS_ARRAY (sym) ? CLASS_DATA (sym)->as : sym->as;
> >> +      no_pack
> >> +  = (as && !attr->pointer && as->type != AS_DEFERRED
> >> +     && as->type != AS_ASSUMED_RANK && as->type !=
> >> AS_ASSUMED_SHAPE);
> >> +    }
> >> +  if (ref && ref->u.ar.as)
> >> +    no_pack = no_pack
> >> +        || (ref->u.ar.as->type != AS_DEFERRED
> >>                      && ref->u.ar.as->type != AS_ASSUMED_RANK
> >> -            && ref->u.ar.as->type != AS_ASSUMED_SHAPE)
> >> -                ||
> >> -       gfc_is_simply_contiguous (expr, false, true));
> >> -
> >> -  no_pack = contiguous && no_pack;
> >> +            && ref->u.ar.as->type != AS_ASSUMED_SHAPE);
> >> +  no_pack
> >> +    = contiguous && (no_pack || gfc_is_simply_contiguous (expr,
> >> false, true));
> >>
> >>      /* If we have an EXPR_OP or a function returning an
> >> explicit-shaped or allocatable array, an array temporary will be
> >> generated which
> >>
> >>
> >> I understand that this may be your personal coding style, but you
> >> might keep in mind that reviewers have to understand the code,
> >> too...
> >>
> >> I have not fully understood your logic when packing is now invoked.
> >> We not only need to do it for explicit-size arrays, but also for
> >> assumed-size.  This still fails for my slightly extended testcase
> >> (see attached) where I pass the class array via:
> >>
> >>     subroutine d4(x,n)
> >>       integer, intent(in) :: n
> >> !   class (foo), intent(inout) :: x(n)  ! OK
> >>       class (foo), intent(inout) :: x(*)  ! not OK
> >>       call d3(x,n)                        ! Simply pass
> >> assumed-size array end subroutine d4
> >>
> >> I am unable to point to the places in your patch where you need to
> >> handle that in addition.
> >>
> >> Otherwise I was unable to see any obvious, major problem with the
> >> patch, but then I am not fluent enough in class handling in the
> >> gfortran FE.  So if e.g. Paul jumps in here within the next 72
> >> hours, it would be great.
> >>
> >> So here comes the issue with the attached code variant.
> >> After your patch, this prints as last 4 relevant lines:
> >>
> >>    full:         -43          44          45         -46
> >> 47 48         -49          50
> >>    d3_1:         -43          44          45
> >>    d3_2:          43         -44         -45
> >>    full:          43         -44         -45         -46
> >> 47 48         -49          50
> >>
> >> while when switching the declaration of the dummy argument of d4:
> >>
> >>    full:         -43          44          45         -46
> >> 47 48         -49          50
> >>    d3_1:         -43         -46         -49
> >>    d3_2:          43          46          49
> >>    full:          43          44          45          46
> >> 47 48          49          50
> >>
> >> The latter one is correct, the former one isn't.
> >>
> >> Sorry for spoiling the show...
> >>
> >> Nevertheless, thanks for your great effort so far!
> >>
> >> Harald
> >>
> >>
> >>> Regards,
> >>>   Andre
> >>>
> >>> PS: @Paul I could figure my test failures with -Ox with x e { 2,
> >>> 3, s } to be caused by initialization order. I.e. a member was
> >>> set only after it was read.
> >>
> >> [remaining part of mail removed]
> >
> >
> > --
> > Andre Vehreschild * Email: vehre ad gmx dot de
>



--
Andre Vehreschild * Kreuzherrenstr. 8 * 52062 Aachen
Tel.: +49 178 3837536 * ve...@gmx.de

Reply via email to