This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH,FORTRAN 21/29] Use stringpool for module tbp
- From: Bernhard Reutner-Fischer <rep dot dot dot nop at gmail dot com>
- To: fortran at gcc dot gnu dot org
- Cc: Bernhard Reutner-Fischer <aldot at gcc dot gnu dot org>, gcc-patches at gcc dot gnu dot org
- Date: Wed, 5 Sep 2018 14:57:24 +0000
- Subject: [PATCH,FORTRAN 21/29] Use stringpool for module tbp
- References: <CAC1BbcSJmqmQW7Zuv+6UQu0znbsVm85i3gP_y4Dny3czMCANgA@mail.gmail.com>
From: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
Switch type bound procedures to use the stringpool.
gcc/fortran/ChangeLog:
2017-11-24 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
* decl.c (gfc_match_decl_type_spec): Use stringpool.
* module.c (mio_expr): Likewise.
(mio_typebound_proc): Likewise.
(mio_full_typebound_tree): Likewise.
(mio_omp_udr_expr): Likewise.
---
gcc/fortran/decl.c | 9 +++++----
gcc/fortran/module.c | 24 ++++++++++++------------
2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index d6a6538f769..cc14a871dfd 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -4049,12 +4049,13 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag)
{
gfc_symbol *upe;
gfc_symtree *st;
+ const char *star_name = gfc_get_string ("%s", "STAR");
ts->type = BT_CLASS;
- gfc_find_symbol ("STAR", gfc_current_ns, 1, &upe);
+ gfc_find_symbol (star_name, gfc_current_ns, 1, &upe);
if (upe == NULL)
{
- upe = gfc_new_symbol ("STAR", gfc_current_ns);
- st = gfc_new_symtree (&gfc_current_ns->sym_root, "STAR");
+ upe = gfc_new_symbol (star_name, gfc_current_ns);
+ st = gfc_new_symtree (&gfc_current_ns->sym_root, star_name);
st->n.sym = upe;
gfc_set_sym_referenced (upe);
upe->refs++;
@@ -4069,7 +4070,7 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag)
}
else
{
- st = gfc_get_tbp_symtree (&gfc_current_ns->sym_root, "STAR");
+ st = gfc_get_tbp_symtree (&gfc_current_ns->sym_root, star_name);
st->n.sym = upe;
upe->refs++;
}
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 3b644234921..24e48c94c76 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3585,9 +3585,9 @@ mio_expr (gfc_expr **ep)
case 3:
break;
default:
- require_atom (ATOM_STRING);
- e->value.function.isym = gfc_find_function (atom_string);
- free (atom_string);
+ const char *name;
+ mio_pool_string (&name);
+ e->value.function.isym = gfc_find_function (name);
}
}
@@ -3872,6 +3872,7 @@ mio_typebound_proc (gfc_typebound_proc** proc)
while (peek_atom () != ATOM_RPAREN)
{
gfc_symtree** sym_root;
+ const char *name;
g = gfc_get_tbp_generic ();
g->specific = NULL;
@@ -3879,10 +3880,9 @@ mio_typebound_proc (gfc_typebound_proc** proc)
mio_integer (&iop);
g->is_operator = (bool) iop;
- require_atom (ATOM_STRING);
+ mio_pool_string (&name);
sym_root = ¤t_f2k_derived->tb_sym_root;
- g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string);
- free (atom_string);
+ g->specific_st = gfc_get_tbp_symtree (sym_root, name);
g->next = (*proc)->u.generic;
(*proc)->u.generic = g;
@@ -3928,12 +3928,12 @@ mio_full_typebound_tree (gfc_symtree** root)
while (peek_atom () == ATOM_LPAREN)
{
gfc_symtree* st;
+ const char *name;
mio_lparen ();
- require_atom (ATOM_STRING);
- st = gfc_get_tbp_symtree (root, atom_string);
- free (atom_string);
+ mio_pool_string (&name);
+ st = gfc_get_tbp_symtree (root, name);
mio_typebound_symtree (st);
}
@@ -4267,9 +4267,9 @@ mio_omp_udr_expr (gfc_omp_udr *udr, gfc_symbol **sym1, gfc_symbol **sym2,
mio_integer (&flag);
if (flag)
{
- require_atom (ATOM_STRING);
- ns->code->resolved_isym = gfc_find_subroutine (atom_string);
- free (atom_string);
+ const char *name;
+ mio_pool_string (&name);
+ ns->code->resolved_isym = gfc_find_subroutine (name);
}
else
mio_symbol_ref (&ns->code->resolved_sym);
--
2.19.0.rc1