aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-05-21 21:12:51 +0200
committerJanus Weil <janus@gcc.gnu.org>2011-05-21 21:12:51 +0200
commit43a9eec7c4ce367bd971617831372cc53bbeb85a (patch)
tree66a8f7f13d2a20bca57942c8ae10efacf9913fc5
parenta5dfec9a97f275141625257dbf1e36e9035b9ea7 (diff)
downloadgcc-43a9eec7c4ce367bd971617831372cc53bbeb85a.zip
gcc-43a9eec7c4ce367bd971617831372cc53bbeb85a.tar.gz
gcc-43a9eec7c4ce367bd971617831372cc53bbeb85a.tar.bz2
re PR fortran/48699 ([OOP] MOVE_ALLOC inside SELECT TYPE)
2011-05-21 Janus Weil <janus@gcc.gnu.org> PR fortran/48699 * match.c (select_type_set_tmp): Make the temporary ALLOCATABLE if the selector is ALLOCATABLE. 2011-05-21 Janus Weil <janus@gcc.gnu.org> PR fortran/48699 * gfortran.dg/select_type_23.f03: New. From-SVN: r174001
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/match.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/select_type_23.f0322
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 45ca79c..b0f4e92 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2011-05-21 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/48699
+ * match.c (select_type_set_tmp): Make the temporary ALLOCATABLE if the
+ selector is ALLOCATABLE.
+
2011-05-20 Janus Weil <janus@gcc.gnu.org>
PR fortran/48706
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index f1c953a..75f2a7f 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -4533,7 +4533,11 @@ select_type_set_tmp (gfc_typespec *ts)
gfc_get_sym_tree (name, gfc_current_ns, &tmp, false);
gfc_add_type (tmp->n.sym, ts, NULL);
gfc_set_sym_referenced (tmp->n.sym);
- gfc_add_pointer (&tmp->n.sym->attr, NULL);
+ if (select_type_stack->selector->ts.type == BT_CLASS &&
+ CLASS_DATA (select_type_stack->selector)->attr.allocatable)
+ gfc_add_allocatable (&tmp->n.sym->attr, NULL);
+ else
+ gfc_add_pointer (&tmp->n.sym->attr, NULL);
gfc_add_flavor (&tmp->n.sym->attr, FL_VARIABLE, name, NULL);
if (ts->type == BT_CLASS)
gfc_build_class_symbol (&tmp->n.sym->ts, &tmp->n.sym->attr,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d5fba0b..fa4549c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-21 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/48699
+ * gfortran.dg/select_type_23.f03: New.
+
2011-05-20 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/defaulted26.C: New.
diff --git a/gcc/testsuite/gfortran.dg/select_type_23.f03 b/gcc/testsuite/gfortran.dg/select_type_23.f03
new file mode 100644
index 0000000..d7788d2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/select_type_23.f03
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR 48699: [OOP] MOVE_ALLOC inside SELECT TYPE
+!
+! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
+
+program testmv2
+
+ type bar
+ integer, allocatable :: ia(:), ja(:)
+ end type bar
+
+ class(bar), allocatable :: sm,sm2
+
+ allocate(sm2)
+
+ select type(sm2)
+ type is (bar)
+ call move_alloc(sm2,sm)
+ end select
+
+end program testmv2