aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2007-03-18 15:00:55 +0000
committerPaul Thomas <pault@gcc.gnu.org>2007-03-18 15:00:55 +0000
commit7453378e3d16d7b048668ec46ab93f7bb9043308 (patch)
tree2d4c05dc146767b80bc9af6736a72b89f2e7c83f /gcc/fortran/resolve.c
parentf210f1cd67fb6a528e4c8647a41106e11320fc91 (diff)
downloadgcc-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.c23
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