diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 47cfead00e0e47ca2e4b6fc983ba010fef9a2fcf..5bf0ccc7aaac2097b1a98cc48e4b4f326fc73a30 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2009-11-04 Tobias Burnus <burnus@gcc.gnu.org> + Janus Weil <janus@gcc.gnu.org> + + PR fortran/41556 + PR fortran/41937 + * interface.c (gfc_check_operator_interface): Handle CLASS arguments. + * resolve.c (resolve_allocate_expr): Handle allocatable components of + CLASS variables. + 2009-11-04 Richard Guenther <rguenther@suse.de> * options.c (gfc_post_options): Rely on common code processing diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 0fd4742a1de895e3eecacf08dc64b550dabd2df1..05e5d2d8a1f2dfc366974f044c3d8a92072f7a30 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -626,6 +626,7 @@ gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op, - Types and kinds do not conform, and - First argument is of derived type. */ if (sym->formal->sym->ts.type != BT_DERIVED + && sym->formal->sym->ts.type != BT_CLASS && (r1 == 0 || r1 == r2) && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type || (gfc_numeric_ts (&sym->formal->sym->ts) diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 5a5fcccc1f8fc3c278e93ce8ab88545a5e3f6197..4a83f22dfd45b65945e2ca0b7003160af6080c6e 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6198,7 +6198,7 @@ check_symbols: sym = a->expr->symtree->n.sym; /* TODO - check derived type components. */ - if (sym->ts.type == BT_DERIVED) + if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS) continue; if ((ar->start[i] != NULL diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 67869642dbeb9f17a5e4de89cee81467b790aa68..3066e3d17ff47aab9d034abacbdc9c2b42b1fbcf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41556 + PR fortran/41937 + * gfortran.dg/class_11.f03: New test. + 2009-11-04 Jason Merrill <jason@redhat.com> PR c++/35067 diff --git a/gcc/testsuite/gfortran.dg/class_11.f03 b/gcc/testsuite/gfortran.dg/class_11.f03 new file mode 100644 index 0000000000000000000000000000000000000000..bf80c4e00e61fb66abd1495e8d32feeace784de1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_11.f03 @@ -0,0 +1,37 @@ +! { dg-do compile } +! +! PR 41556 +! Contributed by Damian Rouson <damian@rouson.net> + + implicit none + + type ,abstract :: object + contains + procedure(assign_interface) ,deferred :: assign + generic :: assignment(=) => assign + end type + + abstract interface + subroutine assign_interface(lhs,rhs) + import :: object + class(object) ,intent(inout) :: lhs + class(object) ,intent(in) :: rhs + end subroutine + end interface + +! PR 41937 +! Contributed by Juergen Reuter <reuter@physik.uni-freiburg.de> + + type, abstract :: cuba_abstract_type + integer :: dim_f = 1 + real, dimension(:), allocatable :: integral + end type cuba_abstract_type + +contains + + subroutine cuba_abstract_alloc_dim_f(this) + class(cuba_abstract_type) :: this + allocate(this%integral(this%dim_f)) + end subroutine cuba_abstract_alloc_dim_f + +end