From e111925dbddb63ca1ee9e43412c7e896ba5c1105 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sun, 21 Feb 2021 21:44:24 +0100 Subject: [PATCH] PR fortran/99169 - Do not clobber allocatable intent(out) dummy argument gcc/fortran/ChangeLog: * trans-expr.c (gfc_conv_procedure_call): Do not add clobber to allocatable intent(out) argument. gcc/testsuite/ChangeLog: * gfortran.dg/intent_optimize_3.f90: New test. (cherry picked from commit 2df374b337a5f6cf5528e91718e4e12e4006b7ae) --- gcc/fortran/trans-expr.c | 1 + gcc/testsuite/gfortran.dg/intent_optimize_3.f90 | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_3.f90 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 787ebb0158dd..c2321a9ff5f2 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -6074,6 +6074,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, && !fsym->attr.allocatable && !fsym->attr.pointer && !e->symtree->n.sym->attr.dimension && !e->symtree->n.sym->attr.pointer + && !e->symtree->n.sym->attr.allocatable /* See PR 41453. */ && !e->symtree->n.sym->attr.dummy /* FIXME - PR 87395 and PR 41453 */ diff --git a/gcc/testsuite/gfortran.dg/intent_optimize_3.f90 b/gcc/testsuite/gfortran.dg/intent_optimize_3.f90 new file mode 100644 index 000000000000..6ecd722da764 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intent_optimize_3.f90 @@ -0,0 +1,16 @@ +! { dg-do run } +! { dg-options "-O2" } +! PR99169 - Segfault passing allocatable scalar into intent(out) dummy argument + +program p + implicit none + integer, allocatable :: i + allocate (i) + call set (i) + if (i /= 5) stop 1 +contains + subroutine set (i) + integer, intent(out) :: i + i = 5 + end subroutine set +end program p -- 2.47.2