Hi all, this is the second part of the patch, substituting gfc_class_vtab_*_get() for gfc_vtable_*_get () where needed.
Bootstraps and regtests ok on x86_64-linux-gnu/F20. Ok for trunk? Regards, Andre -- Andre Vehreschild * Email: vehre ad gmx dot de
vtab_access_rework2_v1.clog
Description: Binary data
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 22fc7c7..54f8f4a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1196,7 +1196,7 @@ gfc_trans_create_temp_array (stmtblock_t * pre, stmtblock_t * post, gfc_ss * ss, elemsize = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (gfc_get_element_type (type))); else - elemsize = gfc_vtable_size_get (class_expr); + elemsize = gfc_class_vtab_size_get (class_expr); size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, size, elemsize); @@ -3076,7 +3076,7 @@ build_class_array_ref (gfc_se *se, tree base, tree index) if (!GFC_CLASS_TYPE_P (TREE_TYPE (decl))) return false; - size = gfc_vtable_size_get (decl); + size = gfc_class_vtab_size_get (decl); /* Build the address of the element. */ type = TREE_TYPE (TREE_TYPE (base)); @@ -7986,7 +7986,8 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, dst_data = gfc_class_data_get (dcmp); src_data = gfc_class_data_get (comp); - size = fold_convert (size_type_node, gfc_vtable_size_get (comp)); + size = fold_convert (size_type_node, + gfc_class_vtab_size_get (comp)); if (CLASS_DATA (c)->attr.dimension) { diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 65a6ff1..24c20fc 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -907,7 +907,7 @@ tree gfc_get_class_array_ref (tree index, tree class_decl) { tree data = gfc_class_data_get (class_decl); - tree size = gfc_vtable_size_get (class_decl); + tree size = gfc_class_vtab_size_get (class_decl); tree offset = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, index, size); @@ -943,16 +943,16 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems) args = NULL; if (from != NULL_TREE) - fcn = gfc_vtable_copy_get (from); + fcn = gfc_class_vtab_copy_get (from); else - fcn = gfc_vtable_copy_get (to); + fcn = gfc_class_vtab_copy_get (to); fcn_type = TREE_TYPE (TREE_TYPE (fcn)); if (from != NULL_TREE) from_data = gfc_class_data_get (from); else - from_data = gfc_vtable_def_init_get (to); + from_data = gfc_class_vtab_def_init_get (to); to_data = gfc_class_data_get (to); @@ -5744,7 +5744,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, CLASS_DATA (expr->value.function.esym->result)->attr); } - final_fndecl = gfc_vtable_final_get (se->expr); + final_fndecl = gfc_class_vtab_final_get (se->expr); is_final = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, final_fndecl, @@ -5755,7 +5755,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, tmp = build_call_expr_loc (input_location, final_fndecl, 3, gfc_build_addr_expr (NULL, tmp), - gfc_vtable_size_get (se->expr), + gfc_class_vtab_size_get (se->expr), boolean_false_node); tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, is_final, tmp, diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index c899a73..1e43f1f 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -5866,14 +5866,14 @@ gfc_conv_intrinsic_sizeof (gfc_se *se, gfc_expr *expr) /* For deferred length arrays, conv_expr_descriptor returns an indirect_ref to the component. */ if (arg->rank < 0) - byte_size = gfc_vtable_size_get (TREE_OPERAND (argse.expr, 0)); + byte_size = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0)); else if (arg->rank > 0) /* The scalarizer added an additional temp. To get the class' vptr one has to look at the original backend_decl. */ - byte_size = gfc_vtable_size_get ( + byte_size = gfc_class_vtab_size_get ( GFC_DECL_SAVED_DESCRIPTOR (arg->symtree->n.sym->backend_decl)); else - byte_size = gfc_vtable_size_get (argse.expr); + byte_size = gfc_class_vtab_size_get (argse.expr); } else { @@ -6003,10 +6003,10 @@ gfc_conv_intrinsic_storage_size (gfc_se *se, gfc_expr *expr) if (arg->ts.type == BT_CLASS) { if (arg->rank > 0) - tmp = gfc_vtable_size_get ( + tmp = gfc_class_vtab_size_get ( GFC_DECL_SAVED_DESCRIPTOR (arg->symtree->n.sym->backend_decl)); else - tmp = gfc_vtable_size_get (TREE_OPERAND (argse.expr, 0)); + tmp = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0)); tmp = fold_convert (result_type, tmp); goto done; } @@ -6151,7 +6151,7 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) argse.string_length); break; case BT_CLASS: - tmp = gfc_vtable_size_get (argse.expr); + tmp = gfc_class_vtab_size_get (argse.expr); break; default: source_type = TREE_TYPE (build_fold_indirect_ref_loc (input_location, @@ -6275,7 +6275,7 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) mold_type = gfc_get_character_type_len (arg->expr->ts.kind, tmp); break; case BT_CLASS: - tmp = gfc_vtable_size_get (argse.expr); + tmp = gfc_class_vtab_size_get (argse.expr); break; default: tmp = fold_convert (gfc_array_index_type, size_in_bytes (mold_type)); diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index db1e1b1..225b0f3 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -5049,7 +5049,7 @@ gfc_trans_allocate (gfc_code * code) classexpr = build_fold_indirect_ref_loc (input_location, se_sz.expr); classexpr = gfc_evaluate_now (classexpr, &se.pre); - memsize = gfc_vtable_size_get (classexpr); + memsize = gfc_class_vtab_size_get (classexpr); memsize = fold_convert (sizetype, memsize); } diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index fe16059..394745e 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -380,7 +380,7 @@ gfc_build_array_ref (tree base, tree offset, tree decl) offset, NULL_TREE, NULL_TREE); } - span = gfc_vtable_size_get (decl); + span = gfc_class_vtab_size_get (decl); } else if (GFC_DECL_SUBREF_ARRAY_P (decl)) span = GFC_DECL_SPAN(decl); @@ -1022,8 +1022,8 @@ gfc_add_comp_finalizer_call (stmtblock_t *block, tree decl, gfc_component *comp, return false; gfc_is_finalizable (CLASS_DATA (comp)->ts.u.derived, &final_expr); - final_fndecl = gfc_vtable_final_get (decl); - size = gfc_vtable_size_get (decl); + final_fndecl = gfc_class_vtab_final_get (decl); + size = gfc_class_vtab_size_get (decl); array = gfc_class_data_get (decl); } diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 4b9e8ac..d7e5bb0 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -350,12 +350,6 @@ tree gfc_class_set_static_fields (tree, tree, tree); tree gfc_class_data_get (tree); tree gfc_class_vptr_get (tree); tree gfc_class_len_get (tree); -#define gfc_vtable_hash_get gfc_class_vtab_hash_get -#define gfc_vtable_size_get gfc_class_vtab_size_get -#define gfc_vtable_extends_get gfc_class_vtab_extends_get -#define gfc_vtable_def_init_get gfc_class_vtab_def_init_get -#define gfc_vtable_copy_get gfc_class_vtab_copy_get -#define gfc_vtable_final_get gfc_class_vtab_final_get /* Get an accessor to the class' vtab's * field, when a class handle is available. */ tree gfc_class_vtab_hash_get (tree);