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;
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