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:
parent
e1a8415303
commit
117a714e21
4 changed files with 49 additions and 9 deletions
|
@ -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
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
17
gcc/testsuite/gfortran.dg/extends_8.f03
Normal file
17
gcc/testsuite/gfortran.dg/extends_8.f03
Normal 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" } }
|
Loading…
Add table
Reference in a new issue