This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, fortran] PR78990 [5/6/7 Regression] ICE when assigning polymorphic array function result


Dear Dominique,

Please find attached a revised patch that I believe fixes the problem
that you found. The changes are the additions in trans-decl.c.

OK for trunk and 7-branch?

Paul

2017-11-18  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/78990
    * expr.c (gfc_is_class_array_function): Renamed from
    'gfc_is_alloc_class_array_function' and modified to return true
    for pointers as well as allocatable results.
    * gfortran.h : Change of name for prototype of above function.
    * trans-array.c (gfc_add_loop_ss_code): Force finalization of
    class array results.
    (build_class_array_ref): Change assertion into a condition.
    (build_class_array_ref): Set the se class_vptr for class array
    function results.
    (gfc_walk_function_expr): Reference gfc_is_class_array_function
    as above.
    * trans-decl.c (get_proc_result): Move it up before
    gfc_trans_deferred_vars.
    (gfc_trans_deferred_vars): Nullify explicit return class arrays
    on entry.
    * trans-expr.c (gfc_conv_class_to_class): Allow conversion of
    class array functions that have an se class_vptr and use it
    for the result vptr.
    (gfc_conv_subref_array_arg): Rename reference to the above
    function.
    (gfc_conv_procedure_call): Ditto. Add the se pre block to the
    loop pre block before the function is evaluated. Do not
    finalize class pointer results.
    (arrayfunc_assign_needs_temporary, gfc_trans_assignment_1) More
    renamed references.
    * trans-intrinsic.c (gfc_conv_intrinsic_size): Ditto.

2017-11-18  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/78990
    * gfortran.dg/class_67.f90: New test.


On 15 November 2017 at 11:40, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
> Hi Paul,
>
> Your patch fixes the ICE and pass the tests. However I see
>
> At line 22 of file pr78990.f90
> Fortran runtime error: Attempting to allocate already allocated variable ‘return_t1'
>
> for the original tests (with mold or source). This runtime error depends on the options:
>
> % gfc pr78990.f90
> % a.out
> At line 22 of file pr78990.f90
> Fortran runtime error: Attempting to allocate already allocated variable 'return_t1'
>
> Error termination. Backtrace:
> …
> % gfc pr78990.f90 -fno-backtrace
> % a.out
>            0           0           0
> % gfc pr78990.f90 -m32
> % a.out
>            0           0           0
> % gfc pr78990.f90 -O
> % a.out
>            0           0           0
>
> The problem seems related to the line
>
>   print*,v2%i
>
> Cheers,
>
> Dominique
>
>



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

Attachment: resubmit.diff
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]