Fix PR61831: Side-effect variable component deallocation
authorMikael Morin <mikael@gcc.gnu.org>
Fri, 17 Jul 2015 09:40:29 +0000 (09:40 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 17 Jul 2015 09:40:29 +0000 (09:40 +0000)
commit0e1f8c6a90834987f63f911a86d78e40d5577e80
tree7078210f7a994805cf1f64553e2404f73464f23c
parenta6c51a129328343ba445f1cc663f455c173cdc97
Fix PR61831: Side-effect variable component deallocation

gcc/fortran/
2015-07-17  Mikael Morin  <mikael@gcc.gnu.org>
    Dominique d'Humieres  <dominiq@lps.ens.fr>

PR fortran/61831
* trans-array.c (gfc_conv_array_parameter): Guard allocatable
component deallocation code generation with descriptorless
calling convention flag.
* trans-expr.c (gfc_conv_expr_reference): Remove allocatable
component deallocation code generation from revision 212329.
(expr_may_alias_variables): New function.
(gfc_conv_procedure_call): New boolean elemental_proc to factor
check for procedure elemental-ness.  Rename boolean f to nodesc_arg
and declare it in the outer scope.  Use expr_may_alias_variables,
elemental_proc and nodesc_arg to decide whether generate allocatable
component deallocation code.
(gfc_trans_subarray_assign): Set deep copy flag.

gcc/testsuite/
2015-07-17  Mikael Morin  <mikael@gcc.gnu.org>

PR fortran/61831
* gfortran.dg/alloc_comp_auto_array_3.f90: Count the number
of generated while loops in the tree dump.
* gfortran.dg/derived_constructor_comps_6.f90: New file.

Co-Authored-By: Dominique d'Humieres <dominiq@lps.ens.fr>
From-SVN: r225926
gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/fortran/trans-expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90 [new file with mode: 0644]