aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2010-01-24 09:10:47 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2010-01-24 09:10:47 +0100
commit23f6293ee8a55bcfa45caa456d86dc403315ce68 (patch)
tree75fbe25735a40e15dfd44c35008a3b60ec13b89e /gcc/fortran/array.c
parent48634cdbedb800727021315512addccd32c0de91 (diff)
downloadgcc-23f6293ee8a55bcfa45caa456d86dc403315ce68.zip
gcc-23f6293ee8a55bcfa45caa456d86dc403315ce68.tar.gz
gcc-23f6293ee8a55bcfa45caa456d86dc403315ce68.tar.bz2
re PR fortran/39304 (ICE with MATMUL, specific/generic functions and rank checking)
2010-01-24 Tobias Burnus <burnus@net-b.de> PR fortran/39304 * array.c (gfc_array_dimen_size): Use correct specific function in the check. 2010-01-24 Tobias Burnus <burnus@net-b.de> PR fortran/39304 * gfortran.dg/generic_20.f90: New test. From-SVN: r156195
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 7bb5100..139609c 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -2053,7 +2053,15 @@ gfc_array_dimen_size (gfc_expr *array, int dimen, mpz_t *result)
return SUCCESS;
}
- if (spec_dimen_size (array->symtree->n.sym->as, dimen, result) == FAILURE)
+ if (array->symtree->n.sym->attr.generic
+ && !array->symtree->n.sym->attr.intrinsic)
+ {
+ if (spec_dimen_size (array->value.function.esym->as, dimen, result)
+ == FAILURE)
+ return FAILURE;
+ }
+ else if (spec_dimen_size (array->symtree->n.sym->as, dimen, result)
+ == FAILURE)
return FAILURE;
break;