re PR fortran/89496 (gcc/fortran/trans-types.c:3015:9: runtime error: member access within null pointer of type 'struct gfc_formal_arglist')
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 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. From-SVN: r269226
This commit is contained in:
parent
140a0bddcc
commit
e5bf8dee56
5 changed files with 35 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
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
|
||||
|
@ -8,7 +15,7 @@
|
|||
|
||||
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.
|
||||
|
|
|
@ -2988,9 +2988,9 @@ get_formal_from_actual_arglist (gfc_symbol *sym, gfc_actual_arglist *actual_args
|
|||
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)
|
||||
|
@ -3012,6 +3012,9 @@ get_formal_from_actual_arglist (gfc_symbol *sym, gfc_actual_arglist *actual_args
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
10
gcc/testsuite/gfortran.dg/altreturn_9_0.f90
Normal file
10
gcc/testsuite/gfortran.dg/altreturn_9_0.f90
Normal file
|
@ -0,0 +1,10 @@
|
|||
! { 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
|
7
gcc/testsuite/gfortran.dg/altreturn_9_1.f90
Normal file
7
gcc/testsuite/gfortran.dg/altreturn_9_1.f90
Normal file
|
@ -0,0 +1,7 @@
|
|||
! { 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
|
Loading…
Add table
Reference in a new issue