Commit 117a714e by Janus Weil

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
parent e1a84153
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 Paul Thomas <pault@gcc.gnu.org> 2009-10-24 Paul Thomas <pault@gcc.gnu.org>
PR fortran/41772 PR fortran/41772
......
...@@ -3994,6 +3994,14 @@ load_derived_extensions (void) ...@@ -3994,6 +3994,14 @@ load_derived_extensions (void)
info = get_integer (symbol); info = get_integer (symbol);
derived = info->u.rsym.sym; 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); gcc_assert (derived->attr.flavor == FL_DERIVED);
if (derived->f2k_derived == NULL) if (derived->f2k_derived == NULL)
derived->f2k_derived = gfc_get_namespace (NULL, 0); derived->f2k_derived = gfc_get_namespace (NULL, 0);
...@@ -4008,16 +4016,19 @@ load_derived_extensions (void) ...@@ -4008,16 +4016,19 @@ load_derived_extensions (void)
nuse = number_use_names (name, false); nuse = number_use_names (name, false);
j = 1; j = 1;
p = find_use_name_n (name, &j, false); p = find_use_name_n (name, &j, false);
st = gfc_find_symtree (gfc_current_ns->sym_root, p); if (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 st = gfc_find_symtree (gfc_current_ns->sym_root, p);
symtree. */ dt = st->n.sym;
st = gfc_new_symtree (&derived->f2k_derived->sym_root, name); st = gfc_find_symtree (derived->f2k_derived->sym_root, name);
st->n.sym = dt; if (st == NULL)
st->n.sym->refs++; {
/* 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 (); mio_rparen ();
} }
......
2009-10-24 Janus Weil <janus@gcc.gnu.org>
PR fortran/41784
* gfortran.dg/extends_8.f03: New test.
2009-10-24 Eric Botcazou <ebotcazou@adacore.com> 2009-10-24 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/pack4.ads: New test. * gnat.dg/specs/pack4.ads: New test.
......
! { dg-do compile }
!
! PR 41784: [OOP] ICE in load_derived_extensions
!
! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
module m
type :: A
end type
type, extends(A) :: B
end type
end module
use m, only: A
end
! { dg-final { cleanup-modules "m" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment