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
This commit is contained in:
Janus Weil 2009-10-24 18:50:41 +02:00
parent e1a8415303
commit 117a714e21
4 changed files with 49 additions and 9 deletions

View file

@ -1,3 +1,10 @@
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>
PR fortran/41772

View file

@ -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 ();
}

View file

@ -1,3 +1,8 @@
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>
* gnat.dg/specs/pack4.ads: New test.

View file

@ -0,0 +1,17 @@
! { 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" } }