diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-06-11 16:58:55 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-06-11 16:58:55 +0200 |
commit | bcb9f394630f75551cb1425798132b566bbc8b90 (patch) | |
tree | 723677dd37685cf87d748a7f17c9b0bb3f83315f /gcc/fortran/trans-array.c | |
parent | dca61c7e6194d0f2942ced148e17bb05f688124c (diff) | |
download | gcc-bcb9f394630f75551cb1425798132b566bbc8b90.zip gcc-bcb9f394630f75551cb1425798132b566bbc8b90.tar.gz gcc-bcb9f394630f75551cb1425798132b566bbc8b90.tar.bz2 |
re PR fortran/57535 ([OOP] ICE when allocating a CLASS function-result variable)
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.
From-SVN: r199958
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 89f26d7..a4321cc 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 { |