diff options
author | Andrew Benson <abenson@carnegiescience.edu> | 2018-07-20 20:00:42 +0000 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2018-07-20 22:00:42 +0200 |
commit | 20e8ceae67be4186c4f20b4fb96f7cfade9853a7 (patch) | |
tree | f7b6db1d67d284cfce8a26fd209a356ce66b23ac /gcc/fortran/trans-types.c | |
parent | d9a81cdb415ff070289eda51d122663c62219330 (diff) | |
download | gcc-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/trans-types.c')
-rw-r--r-- | gcc/fortran/trans-types.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 5b39623..46f6d8c 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -2542,7 +2542,6 @@ gfc_get_derived_type (gfc_symbol * derived, int codimen) bool got_canonical = false; bool unlimited_entity = false; gfc_component *c; - gfc_dt_list *dt; gfc_namespace *ns; tree tmp; bool coarray_flag; @@ -2607,14 +2606,19 @@ gfc_get_derived_type (gfc_symbol * derived, int codimen) ns->translated && !got_canonical; ns = ns->sibling) { - dt = ns->derived_types; - for (; dt && !canonical; dt = dt->next) + if (ns->derived_types) { - gfc_copy_dt_decls_ifequal (dt->derived, derived, true); - if (derived->backend_decl) - got_canonical = true; - } - } + for (gfc_symbol *dt = ns->derived_types; dt && !got_canonical; + dt = dt->dt_next) + { + gfc_copy_dt_decls_ifequal (dt, derived, true); + if (derived->backend_decl) + got_canonical = true; + if (dt->dt_next == ns->derived_types) + break; + } + } + } } /* Store up the canonical type to be added to this one. */ @@ -2875,8 +2879,12 @@ copy_derived_types: } } - for (dt = gfc_derived_types; dt; dt = dt->next) - gfc_copy_dt_decls_ifequal (derived, dt->derived, false); + for (gfc_symbol *dt = gfc_derived_types; dt; dt = dt->dt_next) + { + gfc_copy_dt_decls_ifequal (derived, dt, false); + if (dt->dt_next == gfc_derived_types) + break; + } return derived->backend_decl; } |