2010-12-30 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Dec 2010 11:53:35 +0000 (11:53 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Dec 2010 11:53:35 +0000 (11:53 +0000)
PR fortran/47085
* match.c (gfc_match_allocate): Check for 'class_ok'.
* primary.c (gfc_match_varspec): Ditto.

2010-12-30  Janus Weil  <janus@gcc.gnu.org>

PR fortran/47085
* gfortran.dg/allocate_class_1.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168340 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/match.c
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocate_class_1.f90 [new file with mode: 0644]

index e837b06..d9e91c7 100644 (file)
@@ -1,3 +1,9 @@
+2010-12-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/47085
+       * match.c (gfc_match_allocate): Check for 'class_ok'.
+       * primary.c (gfc_match_varspec): Ditto.
+
 2010-12-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        * dump_parse_tree.c (show_components):  Show
index 44da1bb..a74fdb7 100644 (file)
@@ -2956,7 +2956,7 @@ gfc_match_allocate (void)
       b1 = !(tail->expr->ref
           && (tail->expr->ref->type == REF_COMPONENT
                || tail->expr->ref->type == REF_ARRAY));
-      if (sym && sym->ts.type == BT_CLASS)
+      if (sym && sym->ts.type == BT_CLASS && sym->attr.class_ok)
        b2 = !(CLASS_DATA (sym)->attr.allocatable
               || CLASS_DATA (sym)->attr.class_pointer);
       else
index da028b4..ed85398 100644 (file)
@@ -1774,7 +1774,8 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
          && !gfc_is_proc_ptr_comp (primary, NULL)
          && !(gfc_matching_procptr_assignment
               && sym->attr.flavor == FL_PROCEDURE))
-      || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.dimension))
+      || (sym->ts.type == BT_CLASS && sym->attr.class_ok
+         && CLASS_DATA (sym)->attr.dimension))
     {
       /* In EQUIVALENCE, we don't know yet whether we are seeing
         an array, character variable or array of character
index 0e5a5b6..7941751 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/47085
+       * gfortran.dg/allocate_class_1.f90: New.
+
 2010-12-30  Kai Tietz  <kai.tietz@onevision.com>
 
        PR testsuite/47050
diff --git a/gcc/testsuite/gfortran.dg/allocate_class_1.f90 b/gcc/testsuite/gfortran.dg/allocate_class_1.f90
new file mode 100644 (file)
index 0000000..1dea056
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do compile }
+!
+! PR 47085: [OOP] Problem in allocate( SOURCE=) for polymorphic component
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+ type :: t0
+ end type
+ class(t0) :: x  ! { dg-error "must be dummy, allocatable or pointer" }
+ allocate(x)     ! { dg-error "is not a nonprocedure pointer or an allocatable variable" }
+ end