aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Franke <franke.daniel@gmail.com>2008-12-31 09:21:44 -0500
committerDaniel Franke <dfranke@gcc.gnu.org>2008-12-31 09:21:44 -0500
commitf8df0eb83203acb7e5764a1f0740a705f79b9f08 (patch)
treedac0747bf56162cc838ebc8dcc2c2e6c44dfd842
parent261b8381fef69be03bb6b5bbc5a9cd37cf94e1ef (diff)
downloadgcc-f8df0eb83203acb7e5764a1f0740a705f79b9f08.zip
gcc-f8df0eb83203acb7e5764a1f0740a705f79b9f08.tar.gz
gcc-f8df0eb83203acb7e5764a1f0740a705f79b9f08.tar.bz2
check.c (dim_rank_check): Fixed checking of dimension argument if array is of type EXPR_ARRAY.
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
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/check.c19
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/mapping_2.f902
4 files changed, 22 insertions, 8 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 05c9337..d1135b3 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 8b2732b..228ccb2 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9a8aaa1..a5600c2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/mapping_2.f90 b/gcc/testsuite/gfortran.dg/mapping_2.f90
index a490611..9104184 100644
--- a/gcc/testsuite/gfortran.dg/mapping_2.f90
+++ b/gcc/testsuite/gfortran.dg/mapping_2.f90
@@ -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