diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-11 14:58:55 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-11 14:58:55 +0000 |
commit | 86721945472eb9720464f93ee085370487b34ffb (patch) | |
tree | 723677dd37685cf87d748a7f17c9b0bb3f83315f | |
parent | f1f8b204638ad15746e490169dc6ce904db510dc (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_array_18.f90 | 16 |
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 |