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