diff options
author | Janus Weil <janus@gcc.gnu.org> | 2010-07-29 22:58:57 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2010-07-29 22:58:57 +0200 |
commit | 6a68e29dc51525dc6bb8e6e7cb4df6cfa060383c (patch) | |
tree | 983147dc074eee11f5c8e5fb78bfc200846aba42 /gcc/fortran/resolve.c | |
parent | 0f953f83c264764697ed852c41c5cfca66147883 (diff) | |
download | gcc-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.c | 24 |
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. */ |