Fortran: Fix ICE in resolve.cc with -pedantic
Fixes an ICE in gfc_resolve_code when passing an optional array to an elemental procedure with `-pedantic` enabled. PR95446 added the original check, this patch fixes the case where the other actual argument is an array literal (or something else other than a variable). PR fortran/119054 gcc/fortran/ChangeLog: * resolve.cc (resolve_elemental_actual): When checking other actual arguments to elemental procedures, don't check attributes of literals and function calls. gcc/testsuite/ChangeLog: * gfortran.dg/pr95446.f90: Expand test case to literals and function calls. Signed-off-by: Peter Hill <peter.hill@york.ac.uk>
This commit is contained in:
parent
e8c2f3a427
commit
3014f87871
2 changed files with 17 additions and 1 deletions
|
@ -2429,7 +2429,9 @@ resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
|
|||
for (a = arg0; a; a = a->next)
|
||||
if (a != arg
|
||||
&& a->expr->rank == arg->expr->rank
|
||||
&& !a->expr->symtree->n.sym->attr.optional)
|
||||
&& (a->expr->expr_type != EXPR_VARIABLE
|
||||
|| (a->expr->expr_type == EXPR_VARIABLE
|
||||
&& !a->expr->symtree->n.sym->attr.optional)))
|
||||
{
|
||||
t = true;
|
||||
break;
|
||||
|
|
|
@ -22,6 +22,20 @@ program elemental_optional
|
|||
|
||||
end function outer
|
||||
|
||||
function outer_literal(o) result(l)
|
||||
integer, intent(in), optional :: o(5)
|
||||
integer :: l(5)
|
||||
|
||||
l = inner(o, [1,2,3,4,5])
|
||||
end function outer_literal
|
||||
|
||||
function outer_func(o) result(l)
|
||||
integer, intent(in), optional :: o(5)
|
||||
integer :: l(5)
|
||||
|
||||
l = inner(o, outer())
|
||||
end function outer_func
|
||||
|
||||
elemental function inner(a,b) result(x)
|
||||
integer, intent(in), optional :: a
|
||||
integer, intent(in) :: b
|
||||
|
|
Loading…
Add table
Reference in a new issue