diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-10-24 18:50:41 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-10-24 18:50:41 +0200 |
commit | 117a714e215404112a424b73ab247724f5e2cce9 (patch) | |
tree | e1b101c60325bd31e7a11be3d3a69b7ccd19c562 /gcc/fortran/module.c | |
parent | e1a8415303ec367026e57548885700c57b923f2f (diff) | |
download | gcc-117a714e215404112a424b73ab247724f5e2cce9.zip gcc-117a714e215404112a424b73ab247724f5e2cce9.tar.gz gcc-117a714e215404112a424b73ab247724f5e2cce9.tar.bz2 |
re PR fortran/41784 ([OOP] ICE in load_derived_extensions)
2009-10-24 Janus Weil <janus@gcc.gnu.org>
Paul Thomas <pault@gcc.gnu.org>
PR fortran/41784
* module.c (load_derived_extensions): Skip symbols which are not being
loaded.
2009-10-24 Janus Weil <janus@gcc.gnu.org>
PR fortran/41784
* gfortran.dg/extends_8.f03: New test.
Co-Authored-By: Paul Thomas <pault@gcc.gnu.org>
From-SVN: r153534
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 2112d3e..b2ad6ec 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3994,6 +3994,14 @@ load_derived_extensions (void) info = get_integer (symbol); derived = info->u.rsym.sym; + /* This one is not being loaded. */ + if (!info || !derived) + { + while (peek_atom () != ATOM_RPAREN) + skip_list (); + continue; + } + gcc_assert (derived->attr.flavor == FL_DERIVED); if (derived->f2k_derived == NULL) derived->f2k_derived = gfc_get_namespace (NULL, 0); @@ -4008,16 +4016,19 @@ load_derived_extensions (void) nuse = number_use_names (name, false); j = 1; p = find_use_name_n (name, &j, false); - st = gfc_find_symtree (gfc_current_ns->sym_root, p); - dt = st->n.sym; - st = gfc_find_symtree (derived->f2k_derived->sym_root, name); - if (st == NULL) + if (p) { - /* Only use the real name in f2k_derived to ensure a single - symtree. */ - st = gfc_new_symtree (&derived->f2k_derived->sym_root, name); - st->n.sym = dt; - st->n.sym->refs++; + st = gfc_find_symtree (gfc_current_ns->sym_root, p); + dt = st->n.sym; + st = gfc_find_symtree (derived->f2k_derived->sym_root, name); + if (st == NULL) + { + /* Only use the real name in f2k_derived to ensure a single + symtree. */ + st = gfc_new_symtree (&derived->f2k_derived->sym_root, name); + st->n.sym = dt; + st->n.sym->refs++; + } } mio_rparen (); } |