aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2017-06-05 16:43:01 +0200
committerJanus Weil <janus@gcc.gnu.org>2017-06-05 16:43:01 +0200
commit92bba237da3fdaa4fb67186330355c95ff0072d5 (patch)
tree75e14507a466d694e961da7673ba8f10b8cdb67b /gcc
parent7b3ee9c97d7eb8eedf46ec04e85dc02fb5161f75 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_50.f9026
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