trans.h (struct gfc_ss_info): Move can_be_null_ref component from the data::scalar subcomponent to the toplevel.
fortran/ * trans.h (struct gfc_ss_info): Move can_be_null_ref component from the data::scalar subcomponent to the toplevel. * trans-expr.c (gfc_conv_expr): Update component reference. * trans-array.c (gfc_add_loop_ss_code): Ditto. (gfc_walk_elemental_function_args): Ditto. Move the conditional setting the field out of the scalar-only block. From-SVN: r184893
This commit is contained in:
parent
904eea2c55
commit
9bcf7121b6
|
@ -1,3 +1,12 @@
|
|||
2012-03-04 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
* trans.h (struct gfc_ss_info): Move can_be_null_ref component from
|
||||
the data::scalar subcomponent to the toplevel.
|
||||
* trans-expr.c (gfc_conv_expr): Update component reference.
|
||||
* trans-array.c (gfc_add_loop_ss_code): Ditto.
|
||||
(gfc_walk_elemental_function_args): Ditto. Move the conditional setting
|
||||
the field out of the scalar-only block.
|
||||
|
||||
2012-03-04 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
|
||||
PR fortran/36160
|
||||
|
|
|
@ -2448,7 +2448,7 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript,
|
|||
case GFC_SS_REFERENCE:
|
||||
/* Scalar argument to elemental procedure. */
|
||||
gfc_init_se (&se, NULL);
|
||||
if (ss_info->data.scalar.can_be_null_ref)
|
||||
if (ss_info->can_be_null_ref)
|
||||
{
|
||||
/* If the actual argument can be absent (in other words, it can
|
||||
be a NULL reference), don't try to evaluate it; pass instead
|
||||
|
@ -8493,17 +8493,18 @@ gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg,
|
|||
newss = gfc_get_scalar_ss (head, arg->expr);
|
||||
newss->info->type = type;
|
||||
|
||||
if (dummy_arg != NULL
|
||||
&& dummy_arg->sym->attr.optional
|
||||
&& arg->expr->expr_type == EXPR_VARIABLE
|
||||
&& (gfc_expr_attr (arg->expr).optional
|
||||
|| gfc_expr_attr (arg->expr).allocatable
|
||||
|| gfc_expr_attr (arg->expr).pointer))
|
||||
newss->info->data.scalar.can_be_null_ref = true;
|
||||
}
|
||||
else
|
||||
scalar = 0;
|
||||
|
||||
if (dummy_arg != NULL
|
||||
&& dummy_arg->sym->attr.optional
|
||||
&& arg->expr->expr_type == EXPR_VARIABLE
|
||||
&& (gfc_expr_attr (arg->expr).optional
|
||||
|| gfc_expr_attr (arg->expr).allocatable
|
||||
|| gfc_expr_attr (arg->expr).pointer))
|
||||
newss->info->can_be_null_ref = true;
|
||||
|
||||
head = newss;
|
||||
if (!tail)
|
||||
{
|
||||
|
|
|
@ -5458,7 +5458,7 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr)
|
|||
se->expr = ss_info->data.scalar.value;
|
||||
/* If the reference can be NULL, the value field contains the reference,
|
||||
not the value the reference points to (see gfc_add_loop_ss_code). */
|
||||
if (ss_info->data.scalar.can_be_null_ref)
|
||||
if (ss_info->can_be_null_ref)
|
||||
se->expr = build_fold_indirect_ref_loc (input_location, se->expr);
|
||||
|
||||
se->string_length = ss_info->string_length;
|
||||
|
|
|
@ -198,9 +198,6 @@ typedef struct gfc_ss_info
|
|||
struct
|
||||
{
|
||||
tree value;
|
||||
/* Tells whether the reference can be null in the GFC_SS_REFERENCE case.
|
||||
Used to handle elemental procedures' optional arguments. */
|
||||
bool can_be_null_ref;
|
||||
}
|
||||
scalar;
|
||||
|
||||
|
@ -223,6 +220,11 @@ typedef struct gfc_ss_info
|
|||
|
||||
/* Suppresses precalculation of scalars in WHERE assignments. */
|
||||
unsigned where:1;
|
||||
|
||||
/* Tells whether the SS is for an actual argument which can be a NULL
|
||||
reference. In other words, the associated dummy argument is OPTIONAL.
|
||||
Used to handle elemental procedures. */
|
||||
bool can_be_null_ref;
|
||||
}
|
||||
gfc_ss_info;
|
||||
|
||||
|
|
Loading…
Reference in New Issue