diff options
author | Harald Anlauf <anlauf@gmx.de> | 2021-02-21 21:44:24 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2021-02-21 21:44:24 +0100 |
commit | 2df374b337a5f6cf5528e91718e4e12e4006b7ae (patch) | |
tree | 57a6a652114e28480eb07d33e6324c966d1dcad5 /gcc | |
parent | 3cc5f8620d3d72c51c79e456fc1c000b7d7e19a5 (diff) | |
download | gcc-2df374b337a5f6cf5528e91718e4e12e4006b7ae.zip gcc-2df374b337a5f6cf5528e91718e4e12e4006b7ae.tar.gz gcc-2df374b337a5f6cf5528e91718e4e12e4006b7ae.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/trans-expr.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/intent_optimize_3.f90 | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 103cb31..e614924 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -6077,6 +6077,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 0000000..6ecd722 --- /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 |