aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-types.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/trans-types.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/trans-types.c')
-rw-r--r--gcc/fortran/trans-types.c28
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;
}