mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/59345 (_gfortran_internal_pack on compiler generated temps)
2019-01-13 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/59345 * trans-array.c (gfc_conv_array_parameter): Remove TODO. Do not pack/unpack results of functions which return an explicit-shaped or allocatable array. 2019-01-13 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/59345 * gfortran.dg/internal_pack_17.f90: New test. * gfortran.dg/alloc_comp_auto_array_3.f90: Adjust number of calls to builtin_free. From-SVN: r267903
This commit is contained in:
parent
2642012168
commit
5f8865c358
|
|
@ -1,3 +1,10 @@
|
||||||
|
2019-01-13 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/59345
|
||||||
|
* trans-array.c (gfc_conv_array_parameter): Remove TODO. Do not
|
||||||
|
pack/unpack results of functions which return an explicit-shaped
|
||||||
|
or allocatable array.
|
||||||
|
|
||||||
2019-01-12 Steven G. Kargl <kargl@gcc.gnu.org>
|
2019-01-12 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/61765
|
PR fortran/61765
|
||||||
|
|
|
||||||
|
|
@ -7756,7 +7756,6 @@ array_parameter_size (tree desc, gfc_expr *expr, tree *size)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert an array for passing as an actual parameter. */
|
/* Convert an array for passing as an actual parameter. */
|
||||||
/* TODO: Optimize passing g77 arrays. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, bool g77,
|
gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, bool g77,
|
||||||
|
|
@ -7882,11 +7881,23 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, bool g77,
|
||||||
|
|
||||||
no_pack = contiguous && no_pack;
|
no_pack = contiguous && no_pack;
|
||||||
|
|
||||||
/* If we have an expression, an array temporary will be
|
/* If we have an EXPR_OP or a function returning an explicit-shaped
|
||||||
generated which does not need to be packed / unpacked
|
or allocatable array, an array temporary will be generated which
|
||||||
if passed to an explicit-shape dummy array. */
|
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);
|
if (g77)
|
||||||
|
{
|
||||||
|
if (expr->expr_type == EXPR_OP)
|
||||||
|
no_pack = 1;
|
||||||
|
else if (expr->expr_type == EXPR_FUNCTION && expr->value.function.esym)
|
||||||
|
{
|
||||||
|
gfc_symbol *result = expr->value.function.esym->result;
|
||||||
|
if (result->attr.dimension
|
||||||
|
&& (result->as->type == AS_EXPLICIT || result->attr.allocatable))
|
||||||
|
no_pack = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Array constructors are always contiguous and do not need packing. */
|
/* Array constructors are always contiguous and do not need packing. */
|
||||||
array_constructor = g77 && !this_array_result && expr->expr_type == EXPR_ARRAY;
|
array_constructor = g77 && !this_array_result && expr->expr_type == EXPR_ARRAY;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
2019-01-13 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/59345
|
||||||
|
* gfortran.dg/internal_pack_17.f90: New test.
|
||||||
|
* gfortran.dg/alloc_comp_auto_array_3.f90: Adjust number of calls
|
||||||
|
to builtin_free.
|
||||||
|
|
||||||
2019-01-12 Steven G. Kargl <kargl@gcc.gnu.org>
|
2019-01-12 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/61765
|
PR fortran/61765
|
||||||
|
|
|
||||||
|
|
@ -26,5 +26,5 @@ contains
|
||||||
end function
|
end function
|
||||||
end
|
end
|
||||||
! { dg-final { scan-tree-dump-times "builtin_malloc" 3 "original" } }
|
! { dg-final { scan-tree-dump-times "builtin_malloc" 3 "original" } }
|
||||||
! { dg-final { scan-tree-dump-times "builtin_free" 4 "original" } }
|
! { dg-final { scan-tree-dump-times "builtin_free" 3 "original" } }
|
||||||
! { dg-final { scan-tree-dump-times "while \\(1\\)" 4 "original" } }
|
! { dg-final { scan-tree-dump-times "while \\(1\\)" 4 "original" } }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
! { dg-additional-options "-fdump-tree-original" }
|
||||||
|
! PR 59345 - pack/unpack was not needed here.
|
||||||
|
! Original test case by Joost VandeVondele
|
||||||
|
SUBROUTINE S1(A)
|
||||||
|
INTERFACE
|
||||||
|
FUNCTION CONTIGUOUS_F1() RESULT(res)
|
||||||
|
INTEGER :: res(5)
|
||||||
|
END FUNCTION
|
||||||
|
END INTERFACE
|
||||||
|
CALL S2(CONTIGUOUS_F1())
|
||||||
|
END SUBROUTINE
|
||||||
|
|
||||||
|
SUBROUTINE S3(A)
|
||||||
|
INTERFACE
|
||||||
|
FUNCTION CONTIGOUOS_F2() RESULT(res)
|
||||||
|
INTEGER, ALLOCATABLE :: res(:)
|
||||||
|
END FUNCTION
|
||||||
|
END INTERFACE
|
||||||
|
PROCEDURE(CONTIGOUOS_F2), POINTER :: A
|
||||||
|
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" } }
|
||||||
Loading…
Reference in New Issue