diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 94980f84941..3f19ea40208 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,38 @@ +2005-12-16 Richard Guenther + + (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 * dependency.c, resolve.c, trans-array.c: Fix comment typos. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index a9981a375df..1c03f2a03ce 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -188,7 +188,7 @@ gfc_conv_descriptor_data_addr (tree desc) 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 @@ -519,7 +519,7 @@ gfc_trans_allocate_array_storage (stmtblock_t * pre, stmtblock_t * post, 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 @@ -1159,8 +1159,8 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type, 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); @@ -1670,7 +1670,7 @@ gfc_conv_array_data (tree descriptor) else { /* Descriptorless arrays. */ - return gfc_build_addr_expr (NULL, descriptor); + return build_fold_addr_expr (descriptor); } } else @@ -3830,7 +3830,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) { /* 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 { @@ -3861,7 +3861,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) /* 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; } @@ -4144,7 +4144,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) { /* 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; } @@ -4187,7 +4187,7 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77) 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) diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 7def3ad6e80..7d233d5db72 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -355,7 +355,7 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) 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; } @@ -451,7 +451,7 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) 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); } } @@ -1099,7 +1099,7 @@ gfc_conv_function_val (gfc_se * se, gfc_symbol * sym) 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; @@ -1590,7 +1590,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, /* 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 @@ -1674,7 +1674,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, /* 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) @@ -1696,7 +1696,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, 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); @@ -1708,7 +1708,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, 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); } @@ -1736,7 +1736,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, 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)); @@ -2437,7 +2437,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * 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); } diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 0a61cd447eb..7beed1ac114 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1053,8 +1053,8 @@ gfc_conv_intrinsic_ctime (gfc_se * se, gfc_expr * expr) 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); @@ -1089,8 +1089,8 @@ gfc_conv_intrinsic_fdate (gfc_se * se, gfc_expr * expr) 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); @@ -1127,8 +1127,8 @@ gfc_conv_intrinsic_ttynam (gfc_se * se, gfc_expr * expr) 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); @@ -2721,7 +2721,7 @@ gfc_conv_intrinsic_si_kind (gfc_se * se, gfc_expr * expr) 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); } @@ -2776,7 +2776,7 @@ gfc_conv_intrinsic_trim (gfc_se * se, gfc_expr * expr) 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); diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 87a11c3d861..6b3ef8e5bb5 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -414,7 +414,7 @@ set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock, 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 @@ -423,7 +423,7 @@ set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock, 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); } @@ -491,7 +491,7 @@ gfc_convert_array_to_string (gfc_se * se, gfc_expr * e) { 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)); @@ -797,7 +797,7 @@ gfc_trans_open (gfc_code * code) 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); @@ -850,7 +850,7 @@ gfc_trans_close (gfc_code * code) 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); @@ -901,7 +901,7 @@ build_filepos (tree function, gfc_code * code) 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); @@ -1083,7 +1083,7 @@ gfc_trans_inquire (gfc_code * code) 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); @@ -1191,7 +1191,7 @@ nml_get_addr_expr (gfc_symbol * sym, gfc_component * c, /* 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. */ @@ -1287,7 +1287,7 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name, 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); @@ -1465,7 +1465,7 @@ build_dt (tree function, gfc_code * code) 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); @@ -1544,7 +1544,7 @@ gfc_trans_dt_end (gfc_code * code) 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); @@ -1629,7 +1629,7 @@ transfer_array_component (tree expr, gfc_component * cm) /* 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 @@ -1720,7 +1720,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) else { if (!c->pointer) - tmp = gfc_build_addr_expr (NULL, tmp); + tmp = build_fold_addr_expr (tmp); transfer_expr (se, &c->ts, tmp); } } @@ -1730,7 +1730,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr) 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); @@ -1757,7 +1757,7 @@ transfer_array_desc (gfc_se * se, gfc_typespec * ts, tree addr_expr) 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); @@ -1812,7 +1812,7 @@ gfc_trans_transfer (gfc_code * code) { /* 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; } diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index f0fefdc3580..fbaa1a5b74b 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -3135,7 +3135,7 @@ gfc_trans_allocate (gfc_code * code) 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; @@ -3253,11 +3253,11 @@ gfc_trans_deallocate (gfc_code * code) /* 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));