Function gfc_build_final_call has been simplified, inline it. gcc/fortran/ChangeLog:
* trans.cc (gfc_build_final_call): Inline... (gfc_add_finalizer_call): ... to its one caller. --- gcc/fortran/trans.cc | 66 +++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index 9807b7eb9d9..f8ca388ab9f 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -1201,45 +1201,6 @@ get_var_descr (gfc_se *se, gfc_typespec *ts, gfc_expr *var) -/* Build a call to a FINAL procedure, which finalizes "var". */ - -static tree -gfc_build_final_call (gfc_typespec ts, gfc_expr *final_wrapper, gfc_expr *var, - bool fini_coarray, gfc_expr *class_size) -{ - stmtblock_t block; - gfc_se final_se, size_se, desc_se; - tree final_fndecl, array, size, tmp; - - gcc_assert (var); - - gfc_start_block (&block); - - gfc_init_se (&final_se, NULL); - get_final_proc_ref (&final_se, final_wrapper); - gfc_add_block_to_block (&block, &final_se.pre); - final_fndecl = final_se.expr; - - gfc_init_se (&size_se, NULL); - get_elem_size (&size_se, &ts, class_size); - gfc_add_block_to_block (&block, &size_se.pre); - size = size_se.expr; - - gfc_init_se (&desc_se, NULL); - get_var_descr (&desc_se, &ts, var); - gfc_add_block_to_block (&block, &desc_se.pre); - array = desc_se.expr; - - tmp = build_call_expr_loc (input_location, - final_fndecl, 3, array, - size, fini_coarray ? boolean_true_node - : boolean_false_node); - gfc_add_block_to_block (&block, &desc_se.post); - gfc_add_expr_to_block (&block, tmp); - return gfc_finish_block (&block); -} - - bool gfc_add_comp_finalizer_call (stmtblock_t *block, tree decl, gfc_component *comp, bool fini_coarray) @@ -1408,8 +1369,31 @@ gfc_add_finalizer_call (stmtblock_t *block, gfc_expr *expr2) gcc_assert (final_expr->expr_type == EXPR_VARIABLE); - tmp = gfc_build_final_call (expr->ts, final_expr, expr, - false, elem_size); + stmtblock_t tmp_block; + gfc_start_block (&tmp_block); + + gfc_se final_se; + gfc_init_se (&final_se, NULL); + get_final_proc_ref (&final_se, final_expr); + gfc_add_block_to_block (&tmp_block, &final_se.pre); + + gfc_se size_se; + gfc_init_se (&size_se, NULL); + get_elem_size (&size_se, &expr->ts, elem_size); + gfc_add_block_to_block (&tmp_block, &size_se.pre); + + gfc_se desc_se; + gfc_init_se (&desc_se, NULL); + get_var_descr (&desc_se, &expr->ts, expr); + gfc_add_block_to_block (&tmp_block, &desc_se.pre); + + tmp = build_call_expr_loc (input_location, final_se.expr, 3, + desc_se.expr, size_se.expr, + boolean_false_node); + + gfc_add_block_to_block (&tmp_block, &desc_se.post); + gfc_add_expr_to_block (&tmp_block, tmp); + tmp = gfc_finish_block (&tmp_block); if (expr->ts.type == BT_CLASS && !has_finalizer) { -- 2.40.1