aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-07-29 22:58:57 +0200
committerJanus Weil <janus@gcc.gnu.org>2010-07-29 22:58:57 +0200
commit6a68e29dc51525dc6bb8e6e7cb4df6cfa060383c (patch)
tree983147dc074eee11f5c8e5fb78bfc200846aba42 /gcc/fortran/resolve.c
parent0f953f83c264764697ed852c41c5cfca66147883 (diff)
downloadgcc-6a68e29dc51525dc6bb8e6e7cb4df6cfa060383c.zip
gcc-6a68e29dc51525dc6bb8e6e7cb4df6cfa060383c.tar.gz
gcc-6a68e29dc51525dc6bb8e6e7cb4df6cfa060383c.tar.bz2
re PR fortran/44962 ([OOP] ICE with specification expression SIZE(<CLASS>))
2010-07-29 Janus Weil <janus@gcc.gnu.org> PR fortran/44962 * resolve.c (resolve_fl_derived): Call gfc_resolve_array_spec. 2010-07-29 Janus Weil <janus@gcc.gnu.org> PR fortran/44962 * gfortran.dg/typebound_proc_17.f03: New. From-SVN: r162695
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c24
1 files changed, 4 insertions, 20 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index dab533d..55cbaf0 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -10813,7 +10813,6 @@ resolve_fl_derived (gfc_symbol *sym)
{
gfc_symbol* super_type;
gfc_component *c;
- int i;
super_type = gfc_get_derived_super_type (sym);
@@ -11169,25 +11168,10 @@ resolve_fl_derived (gfc_symbol *sym)
&& sym != c->ts.u.derived)
add_dt_to_dt_list (c->ts.u.derived);
- if (c->attr.pointer || c->attr.proc_pointer || c->attr.allocatable
- || c->as == NULL)
- continue;
-
- for (i = 0; i < c->as->rank; i++)
- {
- if (c->as->lower[i] == NULL
- || (resolve_index_expr (c->as->lower[i]) == FAILURE)
- || !gfc_is_constant_expr (c->as->lower[i])
- || c->as->upper[i] == NULL
- || (resolve_index_expr (c->as->upper[i]) == FAILURE)
- || !gfc_is_constant_expr (c->as->upper[i]))
- {
- gfc_error ("Component '%s' of '%s' at %L must have "
- "constant array bounds",
- c->name, sym->name, &c->loc);
- return FAILURE;
- }
- }
+ if (gfc_resolve_array_spec (c->as, !(c->attr.pointer
+ || c->attr.proc_pointer
+ || c->attr.allocatable)) == FAILURE)
+ return FAILURE;
}
/* Resolve the type-bound procedures. */