aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2013-02-06 20:20:08 +0000
committerPaul Thomas <pault@gcc.gnu.org>2013-02-06 20:20:08 +0000
commitd0c4e31020ff1f11fe4db2dd1f66f111d2078217 (patch)
treef118b59c3cb9e7f2b5f9c44077d02a4297f76ba1 /gcc
parentc362c6741d4511d76d00b3c7c732838539c11a75 (diff)
downloadgcc-d0c4e31020ff1f11fe4db2dd1f66f111d2078217.zip
gcc-d0c4e31020ff1f11fe4db2dd1f66f111d2078217.tar.gz
gcc-d0c4e31020ff1f11fe4db2dd1f66f111d2078217.tar.bz2
re PR fortran/55789 (Needless realloc with array constructor.)
2013-02-06 Paul Thomas <pault@gcc.gnu.org> 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 <pault@gcc.gnu.org> PR fortran/55789 * gfortran.dg/array_constructor_41.f90: New test. From-SVN: r195815
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/array_constructor_41.f9033
4 files changed, 44 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c22d3d9..90987da 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-06 Paul Thomas <pault@gcc.gnu.org>
+
+ 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 <pault@gcc.gnu.org>
PR fortran/56008
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 4553ddc..ee2954e 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 fd5146fa..219b12a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-06 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/55789
+ * gfortran.dg/array_constructor_41.f90: New test.
+
2013-02-06 Janus Weil <janus@gcc.gnu.org>
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 0000000..eb5fd92
--- /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 <Joost.VandeVondele@mat.ethz.ch>
+!
+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" } }