re PR fortran/42769 ([OOP] ICE in resolve_typebound_procedure)
2010-08-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42769 * resolve.c (resolve_structure_cons): For derived types, make sure the type has been resolved. (resolve_typebound_procedures): Make sure the vtab has been generated. 2010-08-29 Janus Weil <janus@gcc.gnu.org> PR fortran/42769 * gfortran.dg/dynamic_dispatch_11.f03: New. From-SVN: r163631
This commit is contained in:
parent
33620355cd
commit
bd48f12390
|
@ -1,10 +1,17 @@
|
|||
2010-08-29 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/42769
|
||||
* resolve.c (resolve_structure_cons): For derived types, make sure the
|
||||
type has been resolved.
|
||||
(resolve_typebound_procedures): Make sure the vtab has been generated.
|
||||
|
||||
2010-08-29 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/45439
|
||||
* match.c (gfc_match_select_type): Give the associate-name the
|
||||
FL_VARIABLE attribute.
|
||||
|
||||
2010-07-28 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
2010-08-28 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
* simplify.c (gfc_simplify_bessel_n2): Fix indention
|
||||
and argument type.
|
||||
|
|
|
@ -930,6 +930,10 @@ resolve_structure_cons (gfc_expr *expr, int init)
|
|||
symbol_attribute a;
|
||||
|
||||
t = SUCCESS;
|
||||
|
||||
if (expr->ts.type == BT_DERIVED)
|
||||
resolve_symbol (expr->ts.u.derived);
|
||||
|
||||
cons = gfc_constructor_first (expr->value.constructor);
|
||||
/* A constructor may have references if it is the result of substituting a
|
||||
parameter variable. In this case we just pull out the component we
|
||||
|
@ -11039,6 +11043,7 @@ error:
|
|||
stree->n.tb->error = 1;
|
||||
}
|
||||
|
||||
|
||||
static gfc_try
|
||||
resolve_typebound_procedures (gfc_symbol* derived)
|
||||
{
|
||||
|
@ -11050,6 +11055,9 @@ resolve_typebound_procedures (gfc_symbol* derived)
|
|||
resolve_bindings_derived = derived;
|
||||
resolve_bindings_result = SUCCESS;
|
||||
|
||||
/* Make sure the vtab has been generated. */
|
||||
gfc_find_derived_vtab (derived);
|
||||
|
||||
if (derived->f2k_derived->tb_sym_root)
|
||||
gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
|
||||
&resolve_typebound_procedure);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-08-29 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/42769
|
||||
* gfortran.dg/dynamic_dispatch_11.f03: New.
|
||||
|
||||
2010-08-29 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/44991
|
||||
|
@ -8,7 +13,7 @@
|
|||
PR fortran/45439
|
||||
* gfortran.dg/select_type_16.f03: New.
|
||||
|
||||
2010-07-28 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
2010-08-28 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
* gfortran.dg/bessel_7.f90: Decrease required precision.
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
! { dg-do run }
|
||||
!
|
||||
! PR 42769: [OOP] ICE in resolve_typebound_procedure
|
||||
! comment #27
|
||||
!
|
||||
! Contributed by Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
|
||||
module mod1
|
||||
type :: t1
|
||||
contains
|
||||
procedure, nopass :: get => my_get
|
||||
end type
|
||||
contains
|
||||
integer function my_get()
|
||||
my_get = 1
|
||||
end function
|
||||
end module
|
||||
|
||||
module mod2
|
||||
contains
|
||||
integer function my_get() ! must have the same name as the function in mod1
|
||||
my_get = 2
|
||||
end function
|
||||
end module
|
||||
|
||||
use mod2
|
||||
use mod1 ! order of use statements is important
|
||||
class(t1),allocatable :: a
|
||||
allocate(a)
|
||||
if (a%get()/=1) call abort()
|
||||
end
|
||||
|
||||
|
||||
! { dg-final { cleanup-modules "mod1 mod2" } }
|
Loading…
Reference in New Issue