diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2007-03-18 15:00:55 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2007-03-18 15:00:55 +0000 |
commit | 7453378e3d16d7b048668ec46ab93f7bb9043308 (patch) | |
tree | 2d4c05dc146767b80bc9af6736a72b89f2e7c83f /gcc/fortran/resolve.c | |
parent | f210f1cd67fb6a528e4c8647a41106e11320fc91 (diff) | |
download | gcc-7453378e3d16d7b048668ec46ab93f7bb9043308.zip gcc-7453378e3d16d7b048668ec46ab93f7bb9043308.tar.gz gcc-7453378e3d16d7b048668ec46ab93f7bb9043308.tar.bz2 |
re PR fortran/30531 ([4.2 only] allocatable component and intent(out) yield ICE in fold_convert)
2007-03-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/30531
PR fortran/31086
* symbo.c : Add gfc_derived_types.
(gfc_free_dt_list): Free derived type list gfc_derived_types.
(gfc_free_namespace): Remove call to gfc_free_dt_list.
(gfc_symbol_done_2): Call gfc_free_dt_list.
* gfortran.h : Declare gfc_derived_types to be external. Remove
derived types field from gfc_namespace.
* resolve.c (resolve_fl_derived): Refer to gfc_derived types
rather than namespace derived_types.
(resolve_fntype): Remove special treatment for module
derived type functions.
* trans-types.c (gfc_get_derived_type): Remove search for like
derived types. Finish by copying back end declaration to like
derived types in the derived type list gfc_derived_types.
2007-03-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/30531
* gfortran.dg/used_types_14.f90: New test.
PR fortran/31086
* gfortran.dg/used_types_15.f90: New test.
From-SVN: r123037
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index db55c0c..a72047e 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5932,16 +5932,16 @@ resolve_fl_derived (gfc_symbol *sym) } /* Add derived type to the derived type list. */ - for (dt_list = sym->ns->derived_types; dt_list; dt_list = dt_list->next) + for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next) if (sym == dt_list->derived) break; if (dt_list == NULL) { dt_list = gfc_get_dt_list (); - dt_list->next = sym->ns->derived_types; + dt_list->next = gfc_derived_types; dt_list->derived = sym; - sym->ns->derived_types = dt_list; + gfc_derived_types = dt_list; } return SUCCESS; @@ -7154,22 +7154,7 @@ resolve_fntype (gfc_namespace *ns) sym->name, &sym->declared_at, sym->ts.derived->name); } - /* Make sure that the type of a module derived type function is in the - module namespace, by copying it from the namespace's derived type - list, if necessary. */ - if (sym->ts.type == BT_DERIVED - && sym->ns->proc_name->attr.flavor == FL_MODULE - && sym->ts.derived->ns - && sym->ns != sym->ts.derived->ns) - { - gfc_dt_list *dt = sym->ns->derived_types; - - for (; dt; dt = dt->next) - if (gfc_compare_derived_types (sym->ts.derived, dt->derived)) - sym->ts.derived = dt->derived; - } - - if (ns->entries) + if (ns->entries) for (el = ns->entries->next; el; el = el->next) { if (el->sym->result == el->sym |