aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-09-23 10:52:27 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-09-23 10:52:27 +0000
commitee7fb0588c6361b4d77337ab0f7527be64fcdde2 (patch)
tree2d8b427e3118ac65e89e93b8f2fc5d19b1ebda88
parent5cdf09b069a3bd155c6c9deb140aa5b37a7ed0a9 (diff)
downloadgcc-ee7fb0588c6361b4d77337ab0f7527be64fcdde2.zip
gcc-ee7fb0588c6361b4d77337ab0f7527be64fcdde2.tar.gz
gcc-ee7fb0588c6361b4d77337ab0f7527be64fcdde2.tar.bz2
re PR fortran/87395 (ICE in in lookup_field_for_decl with whizard)
2018-09-23 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/87395 * gfc_conv_procedure_call: Reformat comments slightly. Do not add clobber on INTENT(OUT) for saved variables. 2018-09-23 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/87395 * gfortran.dg/intent_out_10.f90: New test. From-SVN: r264512
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/intent_out_10.f9014
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6a7f7f2..d8e8ed7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-09-23 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/87395
+ * gfc_conv_procedure_call: Reformat comments slightly. Do not add
+ clobber on INTENT(OUT) for saved variables.
+
2018-09-22 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/41453
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index ae86d59..94f1d4d 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -5281,7 +5281,10 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
add_clobber = fsym && fsym->attr.intent == INTENT_OUT
&& !fsym->attr.allocatable && !fsym->attr.pointer
&& !e->symtree->n.sym->attr.pointer
- && !e->symtree->n.sym->attr.dummy /* See PR 41453. */
+ /* See PR 41453. */
+ && !e->symtree->n.sym->attr.dummy
+ /* FIXME - PR 87395 and PR 41453 */
+ && e->symtree->n.sym->attr.save == SAVE_NONE
&& e->ts.type != BT_CHARACTER && e->ts.type != BT_DERIVED
&& e->ts.type != BT_CLASS && !sym->attr.elemental;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d26e494..946c2b5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-09-23 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/87395
+ * gfortran.dg/intent_out_10.f90: New test.
+
2018-09-22 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/41453
diff --git a/gcc/testsuite/gfortran.dg/intent_out_10.f90 b/gcc/testsuite/gfortran.dg/intent_out_10.f90
new file mode 100644
index 0000000..82e928c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intent_out_10.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! PR 87395 - this used to ICE
+module mo
+ integer, save :: x
+contains
+ subroutine foo
+ x = 42
+ call bar(x)
+ contains
+ subroutine bar(y)
+ integer, intent(out) :: y
+ end subroutine bar
+ end subroutine foo
+end module mo