From: Thomas Koenig Date: Fri, 11 Jan 2019 06:32:10 +0000 (+0000) Subject: re PR fortran/59345 (_gfortran_internal_pack on compiler generated temps) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7dc3df082b9edc8d78e0cd3846027afc345aebc7;p=gcc.git re PR fortran/59345 (_gfortran_internal_pack on compiler generated temps) 2019-01-11 Thomas Koenig PR fortran/59345 * trans-array.c (gfc_conv_parameter_array): Temporary arrays generated for expressions do not need to be repacked. 2019-01-11 Thomas Koenig PR fortran/59345 * gfortran.dg/internal_pack_16.f90: New test. From-SVN: r267829 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 678970b4621..6c5e19576a8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-01-11 Thomas Koenig + + PR fortran/59345 + * trans-array.c (gfc_conv_parameter_array): Temporary + arrays generated for expressions do not need to be repacked. + 2019-01-10 Steven G. Kargl PR fortran/86322 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index e71e76ee9cf..af3a2d838ab 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -7866,6 +7866,12 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, bool g77, no_pack = contiguous && no_pack; + /* If we have an expression, an array temporary will be + generated which does not need to be packed / unpacked + if passed to an explicit-shape dummy array. */ + + no_pack = no_pack || (g77 && expr->expr_type == EXPR_OP); + /* Array constructors are always contiguous and do not need packing. */ array_constructor = g77 && !this_array_result && expr->expr_type == EXPR_ARRAY; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 018fa7675a4..80e0b1ab742 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-11 Thomas Koenig + + PR fortran/59345 + * gfortran.dg/internal_pack_16.f90: New test. + 2019-01-10 Jakub Jelinek PR target/88785 diff --git a/gcc/testsuite/gfortran.dg/internal_pack_16.f90 b/gcc/testsuite/gfortran.dg/internal_pack_16.f90 new file mode 100644 index 00000000000..7e34c2bf733 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/internal_pack_16.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-additional-options "-fdump-tree-original" } +! PR 59345 - pack/unpack was not needed here. +SUBROUTINE S1(A) + REAL :: A(3) + CALL S2(-A) +END SUBROUTINE +! { dg-final { scan-tree-dump-not "_gfortran_internal_pack" "original" } } +! { dg-final { scan-tree-dump-not "_gfortran_internal_unpack" "original" } }