From: Janus Weil Date: Fri, 9 Jun 2017 19:23:48 +0000 (+0200) Subject: backport: re PR fortran/70601 ([OOP] ICE on procedure pointer component call) X-Git-Tag: releases/gcc-5.5.0~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=25fbfe1a4e6d69c4c1a2871f98eaf31dc94a57fb;p=thirdparty%2Fgcc.git backport: re PR fortran/70601 ([OOP] ICE on procedure pointer component call) 2017-06-09 Janus Weil Backport from trunk PR fortran/70601 * trans-expr.c (gfc_conv_procedure_call): Fix detection of allocatable function results. 2017-06-09 Janus Weil Backport from trunk PR fortran/70601 * gfortran.dg/proc_ptr_comp_50.f90: New test. From-SVN: r249073 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5d2f3b4aa6e4..1cb68f81b7f6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-06-09 Janus Weil + + Backport from trunk + PR fortran/70601 + * trans-expr.c (gfc_conv_procedure_call): Fix detection of allocatable + function results. + 2017-05-30 Jakub Jelinek Backported from mainline diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 682fb0ec4434..3e3955126b39 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -5855,7 +5855,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 1bdf9c9d8c97..20f998d37e96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2017-06-09 Janus Weil + + Backport from trunk + PR fortran/70601 + * gfortran.dg/proc_ptr_comp_50.f90: New test. + 2017-06-08 Jakub Jelinek PR c/81006 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 000000000000..d62d8326dd7a --- /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 + +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