check.c (dim_rank_check): Fixed checking of dimension argument if array is of type...
authorDaniel Franke <franke.daniel@gmail.com>
Wed, 31 Dec 2008 14:21:44 +0000 (09:21 -0500)
committerDaniel Franke <dfranke@gcc.gnu.org>
Wed, 31 Dec 2008 14:21:44 +0000 (09:21 -0500)
gcc/fortran:
2008-12-31  Daniel Franke  <franke.daniel@gmail.com>

        * check.c (dim_rank_check): Fixed checking of dimension argument
        if array is of type EXPR_ARRAY.

gcc/testsuite:
2008-12-31  Daniel Franke  <franke.daniel@gmail.com>

* gfortran.dg/mapping_2.f90: Fixed testcase.

From-SVN: r142981

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/mapping_2.f90

index 05c933704765d4b68e9dd641104c9c9398bc2df8..d1135b35dfc08eec965049c3dd1babbca95299fe 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-31  Daniel Franke  <franke.daniel@gmail.com>
+
+       * check.c (dim_rank_check): Fixed checking of dimension argument
+       if array is of type EXPR_ARRAY.
+
 2008-12-22  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/38602
index 8b2732bce1e06de758fac198b340b154e20706b8..228ccb2ef0f72fbfeabd3899f59a4ca9a98b48d9 100644 (file)
@@ -339,16 +339,21 @@ dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
   gfc_array_ref *ar;
   int rank;
 
-  if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
+  if (dim->expr_type != EXPR_CONSTANT
+      || (array->expr_type != EXPR_VARIABLE
+         && array->expr_type != EXPR_ARRAY))
     return SUCCESS;
 
-  ar = gfc_find_array_ref (array);
   rank = array->rank;
-  if (ar->as->type == AS_ASSUMED_SIZE
-      && !allow_assumed
-      && ar->type != AR_ELEMENT
-      && ar->type != AR_SECTION)
-    rank--;
+  if (array->expr_type == EXPR_VARIABLE)
+    {
+      ar = gfc_find_array_ref (array);
+      if (ar->as->type == AS_ASSUMED_SIZE
+         && !allow_assumed
+         && ar->type != AR_ELEMENT
+         && ar->type != AR_SECTION)
+       rank--;
+    }
 
   if (mpz_cmp_ui (dim->value.integer, 1) < 0
       || mpz_cmp_ui (dim->value.integer, rank) > 0)
index 9a8aaa14e2c14b10b8080444b0b6ca5280c784a7..a5600c256139c059752896e0b9208d33e12509cd 100644 (file)
@@ -1,3 +1,7 @@
+2008-12-31  Daniel Franke  <franke.daniel@gmail.com>
+
+       * gfortran.dg/mapping_2.f90: Fixed testcase.
+       
 2008-12-31  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/38647
index a490611174cee1460bd9bcead31f6a46e1137e55..9104184a59bb4df07b1cd4a0ab57d86b9a12f30d 100644 (file)
@@ -11,7 +11,7 @@ module test
       function my_string(x)
          integer i
          real, intent(in) :: x(:)
-         character(0) h4(1:minval([(i,i=30,32)],15))
+         character(0) h4(1:minval([(i,i=30,32), 15]))
          character(0) sv1(size(x,1):size(h4))
          character(0) sv2(2*lbound(sv1,1):size(h4))
          character(lbound(sv2,1)-3) my_string