summaryrefslogtreecommitdiff
path: root/gcc/cp/rtti.c
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-05 23:48:19 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-05 23:48:19 +0000
commit054e01a7e41b19576369dc78d910f91412baa321 (patch)
treed7dc3135dd465d3142b9f9b46de3296e9776e05b /gcc/cp/rtti.c
parent26aefe065f7cb9c6f8f71f2c7d42a55289a451ba (diff)
downloadgcc-054e01a7e41b19576369dc78d910f91412baa321.tar.gz
* langhooks.h (struct lang_hooks_for_tree_inlining): Add
start_inlining, end_inlining. * tree-inline.c (expand_call_inline): Call them. * langhooks-def.h (LANG_HOOKS_TREE_INLINING_START_INLINING): Define. (LANG_HOOKS_TREE_INLINING_END_INLINING): Define. (LANG_HOOKS_TREE_INLINING_INITIALIZER): Add them. * langhooks.c (lhd_tree_inlining_start_inlining): New fn. (lhd_tree_inlining_end_inlining): New fn. * cp-lang.c (LANG_HOOKS_TREE_INLINING_START_INLINING): Define. (LANG_HOOKS_TREE_INLINING_END_INLINING): Define. * tree.c (cp_start_inlining, cp_end_inlining): New fns. * pt.c (push_tinst_level): No longer static. * cp-tree.h: Declare them. * init.c (resolve_offset_ref): Don't check access for the base conversion to access a FIELD_DECL. * cp-tree.h (TYPE_REFFN_P): New macro. * decl.c (bad_specifiers): Check it, too. * rtti.c (create_pseudo_type_info): Set CLASSTYPE_INTERFACE_ONLY on the __*_type_info type if we haven't seen a definition. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47703 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/rtti.c')
-rw-r--r--gcc/cp/rtti.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 3510cc10b38..a1b665e5927 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -1162,6 +1162,15 @@ create_pseudo_type_info VPARAMS((const char *real_name, int ident, ...))
/* Get the vtable decl. */
real_type = xref_tag (class_type_node, get_identifier (real_name), 1);
+ if (! TYPE_SIZE (real_type))
+ {
+ /* We never saw a definition of this type, so we need to tell the
+ compiler that this is an exported class, as indeed all of the
+ __*_type_info classes are. */
+ SET_CLASSTYPE_INTERFACE_KNOWN (real_type);
+ CLASSTYPE_INTERFACE_ONLY (real_type) = 1;
+ }
+
vtable_decl = get_vtable_decl (real_type, /*complete=*/1);
vtable_decl = build_unary_op (ADDR_EXPR, vtable_decl, 0);
@@ -1185,12 +1194,12 @@ create_pseudo_type_info VPARAMS((const char *real_name, int ident, ...))
pseudo_type = make_aggr_type (RECORD_TYPE);
finish_builtin_type (pseudo_type, pseudo_name, fields, ix, ptr_type_node);
TYPE_HAS_CONSTRUCTOR (pseudo_type) = 1;
- VA_CLOSE (ap);
result = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
TINFO_VTABLE_DECL (result) = vtable_decl;
TINFO_PSEUDO_TYPE (result) = pseudo_type;
+ VA_CLOSE (ap);
return result;
}