From: janus Date: Wed, 4 Nov 2009 19:41:07 +0000 (+0000) Subject: 2009-11-04 Tobias Burnus X-Git-Tag: upstream/4.9.2~32760 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=449db53c97557c939e81061836e6b7fd3de4566d;p=platform%2Fupstream%2Flinaro-gcc.git 2009-11-04 Tobias Burnus Janus Weil 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 Janus Weil PR fortran/41556 PR fortran/41937 * gfortran.dg/class_11.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153911 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 47cfead..5bf0ccc 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2009-11-04 Tobias Burnus + Janus Weil + + 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 * options.c (gfc_post_options): Rely on common code processing diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 0fd4742..05e5d2d 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 5a5fccc..4a83f22 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 6786964..3066e3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Janus Weil + + PR fortran/41556 + PR fortran/41937 + * gfortran.dg/class_11.f03: New test. + 2009-11-04 Jason Merrill 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 0000000..bf80c4e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_11.f03 @@ -0,0 +1,37 @@ +! { dg-do compile } +! +! PR 41556 +! Contributed by Damian Rouson + + 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 + + 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