Hello world,

the attached patch, committed as obvious, fixes a regression
introduced by yesterday's patch.  Apparently, clobber statements
are even more finicky that I thought and do not work for saved
variables either.

Regards

        Thomas

2018-09-23  Thomas Koenig  <tkoe...@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  <tkoe...@gcc.gnu.org>

        PR fortran/87395
        * gfortran.dg/intent_out_10.f90: New test.

Index: trans-expr.c
===================================================================
--- trans-expr.c	(Revision 264506)
+++ trans-expr.c	(Arbeitskopie)
@@ -5281,7 +5281,10 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol *
 		      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;
 
! { 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

Reply via email to