aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr32921.f49
-rw-r--r--gcc/tree.c2
4 files changed, 61 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f7454c5..5756ae8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/32921
+ * tree.c (build_array_type): Do not re-layout unbound array
+ types.
+
2007-10-19 Richard Sandiford <rsandifo@nildram.co.uk>
* config/mips/mips.c (mips_canonicalize_comparison): Check
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5cbf244..a22c812 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/32921
+ * gfortran.dg/pr32921.f: New testcase.
+
2007-10-18 Benjamin Kosnik <bkoz@redhat.com>
* g++.old-deja/g++.robertl/eb130.C: Adjust include paths.
diff --git a/gcc/testsuite/gfortran.dg/pr32921.f b/gcc/testsuite/gfortran.dg/pr32921.f
new file mode 100644
index 0000000..d110301
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr32921.f
@@ -0,0 +1,49 @@
+! { dg-do compile }
+! { dg-options "-O2 -fdump-tree-lim" }
+! gfortran -c -m32 -O2 -S junk.f
+!
+ MODULE LES3D_DATA
+
+ IMPLICIT REAL*8 (A-H,O-Z)
+
+ PARAMETER ( NSPECI = 1, ND = 7 + NSPECI )
+
+ INTEGER IMAX
+
+ DOUBLE PRECISION,ALLOCATABLE,DIMENSION(:,:,:) ::
+ > UAV,QAV
+
+
+ END MODULE LES3D_DATA
+!---------------------------------------------------------------------
+!------------------------------------------------------------------------
+ SUBROUTINE FLUXI()
+
+ USE LES3D_DATA
+ IMPLICIT REAL*8(A-H,O-Z)
+
+ ALLOCATABLE QS(:)
+
+ ALLOCATE( QS(0:IMAX))
+ QS=0D0
+
+ RETURN
+ END
+!------------------------------------------------------------------------
+!------------------------------------------------------------------------
+ SUBROUTINE EXTRAPI()
+
+ USE LES3D_DATA
+ IMPLICIT REAL*8(A-H,O-Z)
+
+ I1 = 0
+ I2 = IMAX - 1
+
+ DO I = I1, I2
+ UAV(I,1,2) = QAV(I,1,2)
+ END DO
+
+ RETURN
+ END
+! { dg-final { scan-tree-dump-times "stride" 6 "lim" } }
+! { dg-final { cleanup-tree-dump "lim" } }
diff --git a/gcc/tree.c b/gcc/tree.c
index 88ec29e..3cfa55d 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5665,7 +5665,7 @@ build_array_type (tree elt_type, tree index_type)
hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
t = type_hash_canon (hashcode, t);
- if (!COMPLETE_TYPE_P (t))
+ if (!COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (t))
layout_type (t);
if (TYPE_CANONICAL (t) == t)