2009-11-04 Tobias Burnus <burnus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Nov 2009 19:41:07 +0000 (19:41 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Nov 2009 19:41:07 +0000 (19:41 +0000)
    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  Janus Weil  <janus@gcc.gnu.org>

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

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_11.f03 [new file with mode: 0644]

index 47cfead..5bf0ccc 100644 (file)
@@ -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
index 0fd4742..05e5d2d 100644 (file)
@@ -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)
index 5a5fccc..4a83f22 100644 (file)
@@ -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
index 6786964..3066e3d 100644 (file)
@@ -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 (file)
index 0000000..bf80c4e
--- /dev/null
@@ -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