aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-10-25 19:39:47 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-10-25 19:39:47 +0000
commitbb5e8a7ffc01267f79f7d3a70b98a29fc6eb604c (patch)
treebc8ca7b32029d71b1854594ff6c94c1ba702f188 /gcc/cp/semantics.c
parentf3763a442e854320fd233fd63b7871f301f723be (diff)
downloadgcc-bb5e8a7ffc01267f79f7d3a70b98a29fc6eb604c.zip
gcc-bb5e8a7ffc01267f79f7d3a70b98a29fc6eb604c.tar.gz
gcc-bb5e8a7ffc01267f79f7d3a70b98a29fc6eb604c.tar.bz2
class.c (build_vtbl_initializer): Don't use build_vtable_entry.
* class.c (build_vtbl_initializer): Don't use build_vtable_entry. (build_vtable_entry): Remove. * cp-tree.h (BINFO_VIRTUALS): Expand documentation. (lang_decl): Add thunks. (DECL_THUNKS): New macro. * decl.c (duplicate_decls): Copy it. * method.c (make_thunk): Simplify, and add thunks to DECL_THUNKS. * semantics.c (emit_associated_thunks): Simplify. * g++.dg/abi/vthunk2.C: New test. From-SVN: r58536
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c32
1 files changed, 3 insertions, 29 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index c561a66..e2428a9 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2271,35 +2271,9 @@ emit_associated_thunks (fn)
enabling you to output all the thunks with the function itself. */
if (DECL_VIRTUAL_P (fn))
{
- tree binfo;
- tree v;
-
- for (binfo = TYPE_BINFO (DECL_CONTEXT (fn));
- binfo;
- binfo = TREE_CHAIN (binfo))
- for (v = BINFO_VIRTUALS (binfo); v; v = TREE_CHAIN (v))
- if (BV_FN (v) == fn
- && (!integer_zerop (BV_DELTA (v))
- || BV_USE_VCALL_INDEX_P (v)))
- {
- tree thunk;
- tree vcall_index;
-
- if (BV_USE_VCALL_INDEX_P (v))
- {
- vcall_index = BV_VCALL_INDEX (v);
- my_friendly_assert (vcall_index != NULL_TREE, 20000621);
- }
- else
- vcall_index = NULL_TREE;
-
- thunk = make_thunk (build1 (ADDR_EXPR,
- vfunc_ptr_type_node,
- fn),
- BV_DELTA (v),
- vcall_index);
- use_thunk (thunk, /*emit_p=*/1);
- }
+ tree thunk;
+ for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
+ use_thunk (thunk, /*emit_p=*/1);
}
}