On Sat, Jun 16, 2018 at 01:00:14PM -0700, Steve Kargl wrote: > Untested. > > Index: trans-expr.c > =================================================================== > --- trans-expr.c (revision 261674) > +++ trans-expr.c (working copy) > @@ -3429,6 +3429,10 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr * expr) > gfc_conv_expr (&rse, expr->value.op.op2); > gfc_add_block_to_block (&se->pre, &rse.pre); > > + /* Force evaluation of op1 and op2 to prevent shorting-circuiting. */ > + lse.expr = gfc_evaluate_now (lse.expr); > + rse.expr = gfc_evaluate_noe (rse.expr);
s/noe/now/ Or just use TRUTH_AND_EXPR/TRUTH_OR_EXPR instead of TRUTH_ANDIF_EXPR/TRUTH_ORIF_EXPR, the difference between those is exactly in short-circuiting. ANDIF/ORIF are for C/C++ &&/||, AND/OR are for C/C++ &/|. Jakub