OSDN Git Service

fortran/
authormikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Sep 2012 09:22:54 +0000 (09:22 +0000)
committermikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Sep 2012 09:22:54 +0000 (09:22 +0000)
PR fortran/54208
* simplify.c (simplify_bound_dim): Resolve array spec before
proceeding with simplification.

testsuite/
PR fortran/54208
* gfortran.dg/bound_simplification_3.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@191090 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/bound_simplification_3.f90 [new file with mode: 0644]

index 757678d..bfdcfd5 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-08  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/54208
+       * simplify.c (simplify_bound_dim): Resolve array spec before
+       proceeding with simplification.
+
 2012-07-06  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/53732
index 706dab4..86de9cd 100644 (file)
@@ -3255,6 +3255,9 @@ simplify_bound_dim (gfc_expr *array, gfc_expr *kind, int d, int upper,
   gcc_assert (array->expr_type == EXPR_VARIABLE);
   gcc_assert (as);
 
+  if (gfc_resolve_array_spec (as, 0) == FAILURE)
+    return NULL;
+
   /* The last dimension of an assumed-size array is special.  */
   if ((!coarray && d == as->rank && as->type == AS_ASSUMED_SIZE && !upper)
       || (coarray && d == as->rank + as->corank
index 5fe3cfe..3463dd0 100644 (file)
@@ -1,3 +1,8 @@
+2012-09-08  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/54208
+       * gfortran.dg/bound_simplification_3.f90: New test.
+
 2012-09-07  Richard Guenther  <rguenther@suse.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/bound_simplification_3.f90 b/gcc/testsuite/gfortran.dg/bound_simplification_3.f90
new file mode 100644 (file)
index 0000000..de3a3dc
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/54208
+! The I and J definitions used to raise an error because ARR's array spec
+! was resolved to late for the LBOUND and UBOUND calls to be simplified to
+! a constant.
+!
+! Contributed by Carlos A. Cruz <carlos.a.cruz@nasa.gov>
+
+program testit
+  integer, parameter :: n=2
+  integer, dimension(1-min(n,2)/2:n) :: arr
+  integer, parameter :: i=lbound(arr,1)
+  integer, parameter :: j=ubound(arr,1)
+  ! write(6,*) i, j
+  if (i /= 0) call abort
+  if (j /= 2) call abort
+end program testit
+
+! { dg-final { scan-tree-dump-times "bound" 0 "original" } }
+! { dg-final { scan-tree-dump-times "abort" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }