From da285ce8e420f2827fdf855fc97c7c23bd4b6d23 Mon Sep 17 00:00:00 2001
From: Janus Weil <janus@gcc.gnu.org>
Date: Wed, 2 Feb 2011 14:11:50 +0100
Subject: [PATCH] re PR fortran/47572 ([OOP] Invalid: Allocatable polymorphic
 with init expression.)

2011-02-02  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/47572
	* resolve.c (resolve_fl_variable): Handle polymorphic allocatables.


2011-02-02  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/47572
	* gfortran.dg/class_36.f03: New.

From-SVN: r169520
---
 gcc/fortran/ChangeLog                  |  5 +++++
 gcc/fortran/resolve.c                  |  3 ++-
 gcc/testsuite/ChangeLog                |  5 +++++
 gcc/testsuite/gfortran.dg/class_36.f03 | 14 ++++++++++++++
 4 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/class_36.f03

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bb1d89e49fc5..2331b973e00c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-02  Janus Weil  <janus@gcc.gnu.org>
+
+	PR fortran/47572
+	* resolve.c (resolve_fl_variable): Handle polymorphic allocatables.
+
 2011-02-01  Janus Weil  <janus@gcc.gnu.org>
 
 	PR fortran/47565
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 2a0fc49571c3..7f3734e8269b 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -10063,7 +10063,8 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
   /* Reject illegal initializers.  */
   if (!sym->mark && sym->value)
     {
-      if (sym->attr.allocatable)
+      if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
+				    && CLASS_DATA (sym)->attr.allocatable))
 	gfc_error ("Allocatable '%s' at %L cannot have an initializer",
 		   sym->name, &sym->declared_at);
       else if (sym->attr.external)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4040f63e79a5..6b460a10efee 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-02  Janus Weil  <janus@gcc.gnu.org>
+
+	PR fortran/47572
+	* gfortran.dg/class_36.f03: New.
+
 2011-02-02  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/47566
diff --git a/gcc/testsuite/gfortran.dg/class_36.f03 b/gcc/testsuite/gfortran.dg/class_36.f03
new file mode 100644
index 000000000000..6911f3f04b6b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_36.f03
@@ -0,0 +1,14 @@
+! { dg-do compile }
+!
+! PR 47572: [OOP] Invalid: Allocatable polymorphic with init expression.
+!
+! Contributed by Edmondo Giovannozzi <edmondo.giovannozzi@gmail.com>
+! cf. http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/763785b16883ed68
+
+program scalar_allocation
+  type test
+    real :: a
+  end type
+  class (test), allocatable :: b = test(3.4)  ! { dg-error "cannot have an initializer" }
+  print *,allocated(b)
+end program
-- 
GitLab