diff options
author | Janus Weil <janus@gcc.gnu.org> | 2017-06-05 16:43:01 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2017-06-05 16:43:01 +0200 |
commit | 92bba237da3fdaa4fb67186330355c95ff0072d5 (patch) | |
tree | 75e14507a466d694e961da7673ba8f10b8cdb67b /gcc | |
parent | 7b3ee9c97d7eb8eedf46ec04e85dc02fb5161f75 (diff) | |
download | gcc-92bba237da3fdaa4fb67186330355c95ff0072d5.zip gcc-92bba237da3fdaa4fb67186330355c95ff0072d5.tar.gz gcc-92bba237da3fdaa4fb67186330355c95ff0072d5.tar.bz2 |
re PR fortran/70601 ([OOP] ICE on procedure pointer component call)
2017-06-05 Janus Weil <janus@gcc.gnu.org>
PR fortran/70601
* trans-expr.c (gfc_conv_procedure_call): Fix detection of allocatable
function results.
2017-06-05 Janus Weil <janus@gcc.gnu.org>
PR fortran/70601
* gfortran.dg/proc_ptr_comp_50.f90: New test.
From-SVN: r248878
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/proc_ptr_comp_50.f90 | 26 |
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7b61cc4..33b2ac2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2017-06-05 Janus Weil <janus@gcc.gnu.org> + + PR fortran/70601 + * trans-expr.c (gfc_conv_procedure_call): Fix detection of allocatable + function results. + 2017-06-05 Nicolas Koenig <koenigni@student.ethz.ch> PR fortran/35339 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index af1549a..6af287e 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -6132,7 +6132,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, after use. This necessitates the creation of a temporary to hold the result to prevent duplicate calls. */ if (!byref && sym->ts.type != BT_CHARACTER - && sym->attr.allocatable && !sym->attr.dimension) + && sym->attr.allocatable && !sym->attr.dimension && !comp) { tmp = gfc_create_var (TREE_TYPE (se->expr), NULL); gfc_add_modify (&se->pre, tmp, se->expr); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bed2af7..dd59e45 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-05 Janus Weil <janus@gcc.gnu.org> + + PR fortran/70601 + * gfortran.dg/proc_ptr_comp_50.f90: New test. + 2017-06-05 Nicolas Koenig <koenigni@student.ethz.ch> PR fortran/35339 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_50.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_50.f90 new file mode 100644 index 0000000..d62d832 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_50.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +! +! PR 70601: [5/6/7 Regression] [OOP] ICE on procedure pointer component call +! +! Contributed by zmi <zmi007@gmail.com> + +program test + implicit none + + type :: concrete_type + procedure (run_concrete_type), pointer :: run + end type + + type(concrete_type), allocatable :: concrete + + allocate(concrete) + concrete % run => run_concrete_type + call concrete % run() + +contains + + subroutine run_concrete_type(this) + class(concrete_type) :: this + end subroutine + +end |