]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2013-06-11 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jun 2013 14:58:55 +0000 (14:58 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Jun 2013 14:58:55 +0000 (14:58 +0000)
        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

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_array_18.f90 [new file with mode: 0644]

index 317d0da72d2e27759bc62ce4f77b632daa48b232..6b37acd72fca0191d660684464c289608f743f04 100644 (file)
@@ -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
index 89f26d7d976604a074df3e2e5dd6e475d2bd1cd3..a4321cc3e26bec17533e1c56b6463d7e277e2c1e 100644 (file)
@@ -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
     {
index f3bcb95c36accd238c5fc6207711388a78a04f8b..bb98acad68875440387b0d7f53cd591e9d3631ac 100644 (file)
@@ -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 (file)
index 0000000..5f2f3de
--- /dev/null
@@ -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