aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r--gcc/fortran/interface.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index c50e0bf..8591182 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -1374,7 +1374,7 @@ get_expr_storage_size (gfc_expr *e)
{
long int start, end, stride;
stride = 1;
- start = 1;
+
if (ref->u.ar.stride[i])
{
if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
@@ -1390,6 +1390,11 @@ get_expr_storage_size (gfc_expr *e)
else
return 0;
}
+ else if (ref->u.ar.as->lower[i]
+ && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
+ start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
+ else
+ return 0;
if (ref->u.ar.end[i])
{
@@ -1595,8 +1600,8 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
}
}
- actual_size = get_expr_storage_size(a->expr);
- formal_size = get_sym_storage_size(f->sym);
+ actual_size = get_expr_storage_size (a->expr);
+ formal_size = get_sym_storage_size (f->sym);
if (actual_size != 0 && actual_size < formal_size)
{
if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)