aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-12-30 12:53:35 +0100
committerJanus Weil <janus@gcc.gnu.org>2010-12-30 12:53:35 +0100
commit22061030a7395524b390bf0cc7382802586cfd53 (patch)
treebef3e9e1852e6cf04b23e16f4eb7ab3a68eaed6e
parent7831434fbfa750c69867348177e82c752cd69fc0 (diff)
downloadgcc-22061030a7395524b390bf0cc7382802586cfd53.zip
gcc-22061030a7395524b390bf0cc7382802586cfd53.tar.gz
gcc-22061030a7395524b390bf0cc7382802586cfd53.tar.bz2
re PR fortran/47085 ([OOP] Problem in allocate( SOURCE=) for polymorphic component)
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-30 Janus Weil <janus@gcc.gnu.org> PR fortran/47085 * gfortran.dg/allocate_class_1.f90: New. From-SVN: r168340
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/match.c2
-rw-r--r--gcc/fortran/primary.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_class_1.f9011
5 files changed, 25 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e837b06..d9e91c7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 44da1bb..a74fdb7 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -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
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index da028b4..ed85398 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0e5a5b6..7941751 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..1dea056
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_class_1.f90
@@ -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