fortran: Delete redundant missing_arg_type field

Now that we can get information about an actual arg's associated
dummy using the associated_dummy attribute, the field missing_arg_type
contains redundant information.
This removes it.

gcc/fortran/ChangeLog:
	* gfortran.h (gfc_actual_arglist::missing_arg_type): Remove.
	* interface.c (gfc_compare_actual_formal): Remove
	missing_arg_type initialization.
	* intrinsic.c (sort_actual): Ditto.
	* trans-expr.c (gfc_conv_procedure_call): Use associated_dummy
	and gfc_dummy_arg_get_typespec to get the dummy argument type.
This commit is contained in:
Mikael Morin 2021-11-07 14:40:24 +01:00
parent 5d9d16db96
commit e94e2cf9f9
4 changed files with 8 additions and 16 deletions

View File

@ -1210,11 +1210,6 @@ typedef struct gfc_actual_arglist
/* Alternate return label when the expr member is null. */
struct gfc_st_label *label;
/* This is set to the type of an eventual omitted optional
argument. This is used to determine if a hidden string length
argument has to be added to a function call. */
bt missing_arg_type;
gfc_param_spec_type spec_type;
struct gfc_expr *expr;

View File

@ -3715,11 +3715,6 @@ gfc_compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
if (*ap == NULL && n > 0)
*ap = new_arg[0];
/* Note the types of omitted optional arguments. */
for (a = *ap, f = formal; a; a = a->next, f = f->next)
if (a->expr == NULL && a->label == NULL)
a->missing_arg_type = f->sym->ts.type;
return true;
}

View File

@ -4406,10 +4406,7 @@ do_sort:
}
if (a == NULL)
{
a = gfc_get_actual_arglist ();
a->missing_arg_type = f->ts.type;
}
a = gfc_get_actual_arglist ();
a->associated_dummy = get_intrinsic_dummy_arg (f);

View File

@ -6157,7 +6157,10 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
{
/* Pass a NULL pointer for an absent arg. */
parmse.expr = null_pointer_node;
if (arg->missing_arg_type == BT_CHARACTER)
gfc_dummy_arg * const dummy_arg = arg->associated_dummy;
if (dummy_arg
&& gfc_dummy_arg_get_typespec (*dummy_arg).type
== BT_CHARACTER)
parmse.string_length = build_int_cst (gfc_charlen_type_node,
0);
}
@ -6174,7 +6177,9 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
|| !CLASS_DATA (fsym)->attr.allocatable));
gfc_init_se (&parmse, NULL);
parmse.expr = null_pointer_node;
if (arg->missing_arg_type == BT_CHARACTER)
if (arg->associated_dummy
&& gfc_dummy_arg_get_typespec (*arg->associated_dummy).type
== BT_CHARACTER)
parmse.string_length = build_int_cst (gfc_charlen_type_node, 0);
}
else if (fsym && fsym->ts.type == BT_CLASS