summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-11 14:58:55 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-11 14:58:55 +0000
commit86721945472eb9720464f93ee085370487b34ffb (patch)
tree723677dd37685cf87d748a7f17c9b0bb3f83315f
parentf1f8b204638ad15746e490169dc6ce904db510dc (diff)
downloadgcc-86721945472eb9720464f93ee085370487b34ffb.tar.gz
2013-06-11 Tobias Burnus <burnus@net-b.de>
PR fortran/57535 * trans-array.c (build_class_array_ref): Fix ICE for function result variables. 2013-06-11 Tobias Burnus <burnus@net-b.de> PR fortran/57535 * gfortran.dg/class_array_18.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199958 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_array_18.f9016
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 317d0da72d2..6b37acd72fc 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2013-06-11 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57535
+ * trans-array.c (build_class_array_ref): Fix ICE for
+ function result variables.
+
2013-06-08 Tobias Burnus <burnus@net-b.de>
PR fortran/37336
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 89f26d7d976..a4321cc3e26 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -2991,7 +2991,13 @@ build_class_array_ref (gfc_se *se, tree base, tree index)
if (ts == NULL)
return false;
- if (class_ref == NULL)
+ if (class_ref == NULL && expr->symtree->n.sym->attr.function
+ && expr->symtree->n.sym == expr->symtree->n.sym->result)
+ {
+ gcc_assert (expr->symtree->n.sym->backend_decl == current_function_decl);
+ decl = gfc_get_fake_result_decl (expr->symtree->n.sym, 0);
+ }
+ else if (class_ref == NULL)
decl = expr->symtree->n.sym->backend_decl;
else
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f3bcb95c36a..bb98acad688 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-11 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57535
+ * gfortran.dg/class_array_18.f90: New.
+
2013-06-11 Jan Hubicka <jh@suse.cz>
PR c++/57551
diff --git a/gcc/testsuite/gfortran.dg/class_array_18.f90 b/gcc/testsuite/gfortran.dg/class_array_18.f90
new file mode 100644
index 00000000000..5f2f3dee7f2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_array_18.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR fortran/57535
+!
+program test
+ implicit none
+ type t
+ integer :: ii = 55
+ end type t
+contains
+ function func2()
+ class(t), allocatable :: func2(:)
+ allocate(func2(3))
+ func2%ii = [111,222,333]
+ end function func2
+end program test