aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorAndrew Benson <abenson@carnegiescience.edu>2018-07-20 20:00:42 +0000
committerJanus Weil <janus@gcc.gnu.org>2018-07-20 22:00:42 +0200
commit20e8ceae67be4186c4f20b4fb96f7cfade9853a7 (patch)
treef7b6db1d67d284cfce8a26fd209a356ce66b23ac /gcc/fortran/resolve.c
parentd9a81cdb415ff070289eda51d122663c62219330 (diff)
downloadgcc-20e8ceae67be4186c4f20b4fb96f7cfade9853a7.zip
gcc-20e8ceae67be4186c4f20b4fb96f7cfade9853a7.tar.gz
gcc-20e8ceae67be4186c4f20b4fb96f7cfade9853a7.tar.bz2
gfortran.h (gfc_symbol): Add pointer to next derived type.
2018-07-20 Andrew Benson <abenson@carnegiescience.edu> * gfortran.h (gfc_symbol): Add pointer to next derived type. (gfc_dt_list, gfc_get_dt_list): Remove. (gfc_namespace): Replace gfc_dt_list with gfc_symbol. * parse.c (resolve_all_program_units): Replace gfc_free_dt_list() with simple nullification of gfc_derived_types. * resolve.c (resolve_global_procedure): Replace gfc_dt_list with gfc_symbol. (add_dt_to_dt_list): Change derived type linked list insertion to utilize dt_next pointers in gfc_symbol. * symbol.c (gfc_new_symbol, gfc_free_dt_list, gfc_symbol_done2) (get_iso_c_binding_dt, generate_isocbinding_symbol): Remove gfc_free_dt_list as gfc_dt_list is obsoleted. Change derived type linked list search/insertion to utilize dt_next pointers in gfc_symbol. * trans-types.c (gfc_get_derived_type): Change derived type linked list search to utilize dt_next pointers in gfc_symbol. From-SVN: r262909
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 40fa02d..3035e02 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2509,7 +2509,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
/* Resolve the gsymbol namespace if needed. */
if (!gsym->ns->resolved)
{
- gfc_dt_list *old_dt_list;
+ gfc_symbol *old_dt_list;
/* Stash away derived types so that the backend_decls do not
get mixed up. */
@@ -13533,16 +13533,19 @@ resolve_typebound_procedures (gfc_symbol* derived)
static void
add_dt_to_dt_list (gfc_symbol *derived)
{
- gfc_dt_list *dt_list;
-
- for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next)
- if (derived == dt_list->derived)
- return;
-
- dt_list = gfc_get_dt_list ();
- dt_list->next = gfc_derived_types;
- dt_list->derived = derived;
- gfc_derived_types = dt_list;
+ if (!derived->dt_next)
+ {
+ if (gfc_derived_types)
+ {
+ derived->dt_next = gfc_derived_types->dt_next;
+ gfc_derived_types->dt_next = derived;
+ }
+ else
+ {
+ derived->dt_next = derived;
+ }
+ gfc_derived_types = derived;
+ }
}