From d0c4e31020ff1f11fe4db2dd1f66f111d2078217 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Wed, 6 Feb 2013 20:20:08 +0000 Subject: [PATCH] re PR fortran/55789 (Needless realloc with array constructor.) 2013-02-06 Paul Thomas PR fortran/55789 * trans-array.c (trans_array_constructor): Remove condition 'dynamic' = true if the loop ubound is a VAR_DECL. 2013-02-06 Paul Thomas PR fortran/55789 * gfortran.dg/array_constructor_41.f90: New test. From-SVN: r195815 --- gcc/fortran/ChangeLog | 6 ++++ gcc/fortran/trans-array.c | 3 -- gcc/testsuite/ChangeLog | 5 +++ .../gfortran.dg/array_constructor_41.f90 | 33 +++++++++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/array_constructor_41.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c22d3d9908f2..90987da2238e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-02-06 Paul Thomas + + PR fortran/55789 + * trans-array.c (trans_array_constructor): Remove condition + 'dynamic' = true if the loop ubound is a VAR_DECL. + 2013-02-04 Paul Thomas PR fortran/56008 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 4553ddc5b537..ee2954e5bcab 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -2307,9 +2307,6 @@ trans_array_constructor (gfc_ss * ss, locus * where) } } - if (TREE_CODE (*loop_ubound0) == VAR_DECL) - dynamic = true; - gfc_trans_create_temp_array (&outer_loop->pre, &outer_loop->post, ss, type, NULL_TREE, dynamic, true, false, where); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd5146fa7b4b..219b12a6e755 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-06 Paul Thomas + + PR fortran/55789 + * gfortran.dg/array_constructor_41.f90: New test. + 2013-02-06 Janus Weil PR fortran/55978 diff --git a/gcc/testsuite/gfortran.dg/array_constructor_41.f90 b/gcc/testsuite/gfortran.dg/array_constructor_41.f90 new file mode 100644 index 000000000000..eb5fd92a1eea --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_constructor_41.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! Test fix for PR55789 +! +! Contributed by Joost VandVandole +! +MODULE M1 +CONTAINS + SUBROUTINE cp_1d_i4_sort(arr) + INTEGER(kind=4), DIMENSION(:), & + INTENT(inout) :: arr + arr = (/ (i, i = 1, SIZE(arr)) /) + END SUBROUTINE +END MODULE M1 + +PROGRAM TEST + USE M1 + INTEGER :: arr(1) + INTERFACE + SUBROUTINE mtrace() BIND(C,name="mtrace") + END SUBROUTINE + END INTERFACE + INTERFACE + SUBROUTINE muntrace() BIND(C,name="muntrace") + END SUBROUTINE + END INTERFACE + CALL mtrace() + CALL cp_1d_i4_sort(arr) + CALL muntrace() +END + +! { dg-final { scan-tree-dump-times "realloc" 0 "original" } } +! { dg-final { cleanup-tree-dump "original" } }