+2019-02-26 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/89496
+ * trans-types.c (get_formal_from_actual_arglist): If
+ the actual arglist has no expression, the corresponding
+ formal arglist is an alternate return.
+
2019-02-26 Jakub Jelinek <jakub@redhat.com>
PR fortran/43210
PR fortran/89174
* trans-expr.c (gfc_find_and_cut_at_last_class_ref): Add is_mold
- to garguments. If we are dealing with a MOLD, call
+ to arguments. If we are dealing with a MOLD, call
gfc_expr_to_initialize().
* trans-stmt.c (gfc_trans_allocate): For MOLD, pass is_mold=true
to gfc_find_and_cut_at_last_class_ref.
f = &sym->formal;
for (a = actual_args; a != NULL; a = a->next)
{
+ (*f) = gfc_get_formal_arglist ();
if (a->expr)
{
- (*f) = gfc_get_formal_arglist ();
snprintf (name, GFC_MAX_SYMBOL_LEN, "_formal_%d", var_num ++);
gfc_get_symbol (name, NULL, &s);
if (a->expr->ts.type == BT_PROCEDURE)
s->attr.intent = INTENT_UNKNOWN;
(*f)->sym = s;
}
+ else /* If a->expr is NULL, this is an alternate rerturn. */
+ (*f)->sym = NULL;
+
f = &((*f)->next);
}
}
+2019-02-26 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/89496
+ * gfortran.dg/altreturn_9_0.f90: New file.
+ * gfortran.dg/altreturn_9_1.f90: New file.
+
2019-02-26 Jakub Jelinek <jakub@redhat.com>
PR c++/89481
--- /dev/null
+! { dg-do run }
+! { dg-options -std=gnu }
+! { dg-additional-sources altreturn_9_1.f90 }
+! PR 89496 - wrong type for alternate return was generated
+
+program main
+ call sub(10, *10, 20)
+ stop 1
+10 continue
+end program main
--- /dev/null
+! { dg-do compile }
+! { dg-options "-std=gnu" }
+! See altreturn_9_0.f90
+subroutine sub(i, *, j)
+ if (i == 10 .and. j == 20) return 1
+ return
+end subroutine sub