[0/3] Fix argument evaluation order [PR92178]

Message ID 20230711103253.1589353-1-mikael@gcc.gnu.org
Headers
Series Fix argument evaluation order [PR92178] |

Message

Mikael Morin July 11, 2023, 10:32 a.m. UTC
  Hello,

this is a followup to Harald's recent work [1] on the evaluation order
of arguments, when one of them is passed to an intent(out) allocatable
dummy and is deallocated before the call.
This extends Harald's fix to support:
 - scalars passed to assumed rank dummies (patch 1),
 - scalars passed to assumed rank dummies with the data reference
 depending on its own content (patch 2),
 - arrays with the data reference depending on its own content
 (patch 3).

There is one (last?) case which is not supported, for which I have opened
a separate PR [2].

Regression tested on x86_64-pc-linux-gnu. OK for master?

[1] https://gcc.gnu.org/pipermail/fortran/2023-July/059562.html 
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110618

Mikael Morin (3):
  fortran: defer class wrapper initialization after deallocation
    [PR92178]
  fortran: Factor data references for scalar class argument wrapping
    [PR92178]
  fortran: Reorder array argument evaluation parts [PR92178]

 gcc/fortran/trans-array.cc                  |   3 +
 gcc/fortran/trans-expr.cc                   | 130 +++++++++++++++++---
 gcc/fortran/trans.cc                        |  28 +++++
 gcc/fortran/trans.h                         |   8 +-
 gcc/testsuite/gfortran.dg/intent_out_19.f90 |  22 ++++
 gcc/testsuite/gfortran.dg/intent_out_20.f90 |  33 +++++
 gcc/testsuite/gfortran.dg/intent_out_21.f90 |  33 +++++
 7 files changed, 236 insertions(+), 21 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_19.f90
 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_20.f90
 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_21.f90
  

Comments

Harald Anlauf July 13, 2023, 7:59 p.m. UTC | #1
Hi Mikael,

Am 11.07.23 um 12:32 schrieb Mikael Morin via Gcc-patches:
> Hello,
>
> this is a followup to Harald's recent work [1] on the evaluation order
> of arguments, when one of them is passed to an intent(out) allocatable
> dummy and is deallocated before the call.
> This extends Harald's fix to support:
>   - scalars passed to assumed rank dummies (patch 1),
>   - scalars passed to assumed rank dummies with the data reference
>   depending on its own content (patch 2),
>   - arrays with the data reference depending on its own content
>   (patch 3).
>
> There is one (last?) case which is not supported, for which I have opened
> a separate PR [2].
>
> Regression tested on x86_64-pc-linux-gnu. OK for master?

this is an impressive improvement for the CLASS case.  Maybe Paul
wants to have another look at it, but it is OK from my side.

Thanks for the patch!

Harald

> [1] https://gcc.gnu.org/pipermail/fortran/2023-July/059562.html
> [2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110618
>
> Mikael Morin (3):
>    fortran: defer class wrapper initialization after deallocation
>      [PR92178]
>    fortran: Factor data references for scalar class argument wrapping
>      [PR92178]
>    fortran: Reorder array argument evaluation parts [PR92178]
>
>   gcc/fortran/trans-array.cc                  |   3 +
>   gcc/fortran/trans-expr.cc                   | 130 +++++++++++++++++---
>   gcc/fortran/trans.cc                        |  28 +++++
>   gcc/fortran/trans.h                         |   8 +-
>   gcc/testsuite/gfortran.dg/intent_out_19.f90 |  22 ++++
>   gcc/testsuite/gfortran.dg/intent_out_20.f90 |  33 +++++
>   gcc/testsuite/gfortran.dg/intent_out_21.f90 |  33 +++++
>   7 files changed, 236 insertions(+), 21 deletions(-)
>   create mode 100644 gcc/testsuite/gfortran.dg/intent_out_19.f90
>   create mode 100644 gcc/testsuite/gfortran.dg/intent_out_20.f90
>   create mode 100644 gcc/testsuite/gfortran.dg/intent_out_21.f90
>