aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/module.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2009-10-24 18:50:41 +0200
committerJanus Weil <janus@gcc.gnu.org>2009-10-24 18:50:41 +0200
commit117a714e215404112a424b73ab247724f5e2cce9 (patch)
treee1b101c60325bd31e7a11be3d3a69b7ccd19c562 /gcc/fortran/module.c
parente1a8415303ec367026e57548885700c57b923f2f (diff)
downloadgcc-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.c29
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 ();
}