+2005-12-16 Richard Guenther <rguenther@suse.de>
+
+ (gfc_conv_descriptor_data_addr): Use build_fold_addr_expr where
+ appropriate.
+ (gfc_trans_allocate_array_storage): Likewise.
+ (gfc_trans_array_constructor_value): Likewise.
+ (gfc_conv_array_data): Likewise.
+ (gfc_conv_expr_descriptor): Likewise.
+ (gfc_conv_array_parameter): Likewise.
+ (gfc_conv_variable): Likewise.
+ (gfc_conv_function_val): Likewise.
+ (gfc_conv_function_call): Likewise.
+ (gfc_conv_expr_reference): Likewise.
+ (gfc_conv_intrinsic_ctime): Likewise.
+ (gfc_conv_intrinsic_fdate): Likewise.
+ (gfc_conv_intrinsic_ttynam): Likewise.
+ (gfc_conv_intrinsic_si_kind): Likewise.
+ (gfc_conv_intrinsic_trim): Likewise.
+ (set_parameter_ref): Likewise.
+ (gfc_convert_array_to_string): Likewise.
+ (gfc_trans_open): Likewise.
+ (gfc_trans_close): Likewise.
+ (build_filepos): Likewise.
+ (gfc_trans_inquire): Likewise.
+ (nml_get_addr_expr): Likewise.
+ (transfer_namelist_element): Likewise.
+ (build_dt): Likewise.
+ (gfc_trans_dt_end): Likewise.
+ (transfer_array_component): Likewise.
+ (transfer_expr): Likewise.
+ (transfer_array_desc): Likewise.
+ (gfc_trans_transfer): Likewise.
+ (gfc_trans_allocate): Likewise.
+ (gfc_trans_deallocate): Likewise.
+
2005-12-16 Kazu Hirata <kazu@codesourcery.com>
* dependency.c, resolve.c, trans-array.c: Fix comment typos.
gcc_assert (DATA_FIELD == 0);
t = build3 (COMPONENT_REF, TREE_TYPE (field), desc, field, NULL_TREE);
- return gfc_build_addr_expr (NULL, t);
+ return build_fold_addr_expr (t);
}
tree
tmp = build_array_type (gfc_get_element_type (TREE_TYPE (desc)),
tmp);
tmp = gfc_create_var (tmp, "A");
- tmp = gfc_build_addr_expr (NULL, tmp);
+ tmp = build_fold_addr_expr (tmp);
gfc_conv_descriptor_data_set (pre, desc, tmp);
}
else
tmp = gfc_conv_descriptor_data_get (desc);
tmp = gfc_build_indirect_ref (tmp);
tmp = gfc_build_array_ref (tmp, *poffset);
- tmp = gfc_build_addr_expr (NULL, tmp);
- init = gfc_build_addr_expr (NULL, init);
+ tmp = build_fold_addr_expr (tmp);
+ init = build_fold_addr_expr (init);
size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (type));
bound = build_int_cst (NULL_TREE, n * size);
else
{
/* Descriptorless arrays. */
- return gfc_build_addr_expr (NULL, descriptor);
+ return build_fold_addr_expr (descriptor);
}
}
else
{
/* We pass full arrays directly. This means that pointers and
allocatable arrays should also work. */
- se->expr = gfc_build_addr_expr (NULL_TREE, desc);
+ se->expr = build_fold_addr_expr (desc);
}
else
{
/* For pointer assignments pass the descriptor directly. */
se->ss = secss;
- se->expr = gfc_build_addr_expr (NULL, se->expr);
+ se->expr = build_fold_addr_expr (se->expr);
gfc_conv_expr (se, expr);
return;
}
{
/* Get a pointer to the new descriptor. */
if (se->want_pointer)
- se->expr = gfc_build_addr_expr (NULL, desc);
+ se->expr = build_fold_addr_expr (desc);
else
se->expr = desc;
}
if (sym->attr.dummy || POINTER_TYPE_P (TREE_TYPE (tmp)))
se->expr = tmp;
else
- se->expr = gfc_build_addr_expr (NULL, tmp);
+ se->expr = build_fold_addr_expr (tmp);
return;
}
if (sym->attr.allocatable)
if (!sym->attr.dummy)
{
gcc_assert (TREE_CODE (se->expr) == FUNCTION_DECL);
- se->expr = gfc_build_addr_expr (NULL, se->expr);
+ se->expr = build_fold_addr_expr (se->expr);
}
return;
}
if (expr->ts.type == BT_CHARACTER)
gfc_conv_string_parameter (se);
else
- se->expr = gfc_build_addr_expr (NULL, se->expr);
+ se->expr = build_fold_addr_expr (se->expr);
}
}
if (!POINTER_TYPE_P (TREE_TYPE (tmp)))
{
gcc_assert (TREE_CODE (tmp) == FUNCTION_DECL);
- tmp = gfc_build_addr_expr (NULL, tmp);
+ tmp = build_fold_addr_expr (tmp);
}
}
se->expr = tmp;
/* Scalar pointer dummy args require an extra level of
indirection. The null pointer already contains
this level of indirection. */
- parmse.expr = gfc_build_addr_expr (NULL, parmse.expr);
+ parmse.expr = build_fold_addr_expr (parmse.expr);
}
}
else
/* Pass the temporary as the first argument. */
tmp = info->descriptor;
- tmp = gfc_build_addr_expr (NULL, tmp);
+ tmp = build_fold_addr_expr (tmp);
retargs = gfc_chainon_list (retargs, tmp);
}
else if (ts.type == BT_CHARACTER)
var = gfc_create_var (build_pointer_type (tmp), "pstr");
/* Provide an address expression for the function arguments. */
- var = gfc_build_addr_expr (NULL, var);
+ var = build_fold_addr_expr (var);
}
else
var = gfc_conv_string_tmp (se, type, len);
gcc_assert (gfc_option.flag_f2c && ts.type == BT_COMPLEX);
type = gfc_get_complex_type (ts.kind);
- var = gfc_build_addr_expr (NULL, gfc_create_var (type, "cmplx"));
+ var = build_fold_addr_expr (gfc_create_var (type, "cmplx"));
retargs = gfc_chainon_list (retargs, var);
}
TREE_TYPE (sym->backend_decl)
= build_function_type (integer_type_node,
TYPE_ARG_TYPES (TREE_TYPE (sym->backend_decl)));
- se->expr = gfc_build_addr_expr (NULL, sym->backend_decl);
+ se->expr = build_fold_addr_expr (sym->backend_decl);
}
fntype = TREE_TYPE (TREE_TYPE (se->expr));
gfc_add_block_to_block (&se->pre, &se->post);
/* Take the address of that value. */
- se->expr = gfc_build_addr_expr (NULL, var);
+ se->expr = build_fold_addr_expr (var);
}
len = gfc_create_var (gfc_int8_type_node, "len");
tmp = gfc_conv_intrinsic_function_args (se, expr);
- arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
- arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+ arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+ arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
arglist = chainon (arglist, tmp);
tmp = gfc_build_function_call (gfor_fndecl_ctime, arglist);
len = gfc_create_var (gfc_int4_type_node, "len");
tmp = gfc_conv_intrinsic_function_args (se, expr);
- arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
- arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+ arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+ arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
arglist = chainon (arglist, tmp);
tmp = gfc_build_function_call (gfor_fndecl_fdate, arglist);
len = gfc_create_var (gfc_int4_type_node, "len");
tmp = gfc_conv_intrinsic_function_args (se, expr);
- arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
- arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+ arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+ arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
arglist = chainon (arglist, tmp);
tmp = gfc_build_function_call (gfor_fndecl_ttynam, arglist);
args = gfc_conv_intrinsic_function_args (se, expr);
args = TREE_VALUE (args);
- args = gfc_build_addr_expr (NULL, args);
+ args = build_fold_addr_expr (args);
args = tree_cons (NULL_TREE, args, NULL_TREE);
se->expr = gfc_build_function_call (gfor_fndecl_si_kind, args);
}
len = gfc_create_var (gfc_int4_type_node, "len");
tmp = gfc_conv_intrinsic_function_args (se, expr);
- arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+ arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
arglist = gfc_chainon_list (arglist, addr);
arglist = chainon (arglist, tmp);
if (TYPE_MODE (TREE_TYPE (se.expr))
== TYPE_MODE (TREE_TYPE (TREE_TYPE (p->field))))
addr = convert (TREE_TYPE (p->field),
- gfc_build_addr_expr (NULL, se.expr));
+ build_fold_addr_expr (se.expr));
else
{
/* The type used by the library has different size
tree tmpvar
= gfc_create_var (TREE_TYPE (TREE_TYPE (p->field)),
st_parameter_field[type].name);
- addr = gfc_build_addr_expr (NULL, tmpvar);
+ addr = build_fold_addr_expr (tmpvar);
tmp = convert (TREE_TYPE (se.expr), tmpvar);
gfc_add_modify_expr (postblock, se.expr, tmp);
}
{
size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size,
TREE_OPERAND (se->expr, 1));
- se->expr = gfc_build_addr_expr (NULL, se->expr);
+ se->expr = build_fold_addr_expr (se->expr);
}
tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type));
set_parameter_const (&block, var, IOPARM_common_flags, mask);
- tmp = gfc_build_addr_expr (NULL_TREE, var);
+ tmp = build_fold_addr_expr (var);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (iocall[IOCALL_OPEN], tmp);
gfc_add_expr_to_block (&block, tmp);
set_parameter_const (&block, var, IOPARM_common_flags, mask);
- tmp = gfc_build_addr_expr (NULL_TREE, var);
+ tmp = build_fold_addr_expr (var);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (iocall[IOCALL_CLOSE], tmp);
gfc_add_expr_to_block (&block, tmp);
set_parameter_const (&block, var, IOPARM_common_flags, mask);
- tmp = gfc_build_addr_expr (NULL_TREE, var);
+ tmp = build_fold_addr_expr (var);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (function, tmp);
gfc_add_expr_to_block (&block, tmp);
set_parameter_const (&block, var, IOPARM_common_flags, mask);
- tmp = gfc_build_addr_expr (NULL_TREE, var);
+ tmp = build_fold_addr_expr (var);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (iocall[IOCALL_INQUIRE], tmp);
gfc_add_expr_to_block (&block, tmp);
/* Now build the address expression. */
- tmp = gfc_build_addr_expr (NULL, tmp);
+ tmp = build_fold_addr_expr (tmp);
/* If scalar dummy, resolve indirect reference now. */
The call for the scalar part transfers:
(address, name, type, kind or string_length, dtype) */
- dt_parm_addr = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ dt_parm_addr = build_fold_addr_expr (dt_parm);
NML_FIRST_ARG (dt_parm_addr);
NML_ADD_ARG (addr_expr);
NML_ADD_ARG (string);
else
set_parameter_const (&block, var, IOPARM_common_flags, mask);
- tmp = gfc_build_addr_expr (NULL_TREE, var);
+ tmp = build_fold_addr_expr (var);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (function, tmp);
gfc_add_expr_to_block (&block, tmp);
gcc_unreachable ();
}
- tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ tmp = build_fold_addr_expr (dt_parm);
tmp = gfc_chainon_list (NULL_TREE, tmp);
tmp = gfc_build_function_call (function, tmp);
gfc_add_expr_to_block (&block, tmp);
/* Now se.expr contains an element of the array. Take the address and pass
it to the IO routines. */
- tmp = gfc_build_addr_expr (NULL, se.expr);
+ tmp = build_fold_addr_expr (se.expr);
transfer_expr (&se, &cm->ts, tmp);
/* We are done now with the loop body. Wrap up the scalarizer and
else
{
if (!c->pointer)
- tmp = gfc_build_addr_expr (NULL, tmp);
+ tmp = build_fold_addr_expr (tmp);
transfer_expr (se, &c->ts, tmp);
}
}
internal_error ("Bad IO basetype (%d)", ts->type);
}
- tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ tmp = build_fold_addr_expr (dt_parm);
args = gfc_chainon_list (NULL_TREE, tmp);
args = gfc_chainon_list (args, addr_expr);
args = gfc_chainon_list (args, arg2);
kind_arg = build_int_cst (NULL_TREE, ts->kind);
- tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ tmp = build_fold_addr_expr (dt_parm);
args = gfc_chainon_list (NULL_TREE, tmp);
args = gfc_chainon_list (args, addr_expr);
args = gfc_chainon_list (args, kind_arg);
{
/* Get the descriptor. */
gfc_conv_expr_descriptor (&se, expr, ss);
- tmp = gfc_build_addr_expr (NULL, se.expr);
+ tmp = build_fold_addr_expr (se.expr);
transfer_array_desc (&se, &expr->ts, tmp);
goto finish_block_label;
}
tree gfc_int4_type_node = gfc_get_int_type (4);
stat = gfc_create_var (gfc_int4_type_node, "stat");
- pstat = gfc_build_addr_expr (NULL, stat);
+ pstat = build_fold_addr_expr (stat);
error_label = gfc_build_label_decl (NULL_TREE);
TREE_USED (error_label) = 1;
/* Variable used with the library call. */
stat = gfc_create_var (gfc_int4_type_node, "stat");
- pstat = gfc_build_addr_expr (NULL, stat);
+ pstat = build_fold_addr_expr (stat);
/* Running total of possible deallocation failures. */
astat = gfc_create_var (gfc_int4_type_node, "astat");
- apstat = gfc_build_addr_expr (NULL, astat);
+ apstat = build_fold_addr_expr (astat);
/* Initialize astat to 0. */
gfc_add_modify_expr (&block, astat, build_int_cst (TREE_TYPE (astat), 0));