invoke.texi (-fsquangle): Remove documentation.
* invoke.texi (-fsquangle): Remove documentation. (-fname-mangling-version): Likewise. * cp-tree.h (new_abi_rtti_p): Remove. (name_mangling_version): Likewise. (flag_do_squangling): Likewise. * class.c (build_rtti_vtbl_entries): Remove old ABI support. * decl.c (grokfndecl): Likewise. * decl2.c (name_mangling_version): Remove. (flag_do_squangling): Likewise. (lang_f_options): Remove `squangle'. (unsupported_options): Add `squangle'. (cxx_decode_option): Issue a warning about uses of -fname-mangling-version. (finish_file): Remove old ABI support. * pt.c (check_explicit_specialization): Likewise. (tsubst_decl): Likewise. * rtti.c (init_rtti_processing): Likewise. (build_headof): Likewise. (get_tinfo_decl_dynamic): Likewise. (tinfo_from_decl): Likewise. (build_dynamic_cast_1): Likewise. (synthesize_tinfo_var): Likewise. * init.c (build_new): Allow enumeration types for the array-bounds in a direct-new-declarator. From-SVN: r39845
This commit is contained in:
parent
e1078cfca6
commit
8fa33dfa93
@ -1,3 +1,8 @@
|
||||
2001-02-17 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* invoke.texi (-fsquangle): Remove documentation.
|
||||
(-fname-mangling-version): Likewise.
|
||||
|
||||
2001-02-18 Lars Brinkhoff <lars@nocrew.org>
|
||||
|
||||
* optabs.c (expand_abs): Remove reference to
|
||||
|
@ -34,6 +34,26 @@
|
||||
|
||||
2001-02-17 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* cp-tree.h (new_abi_rtti_p): Remove.
|
||||
(name_mangling_version): Likewise.
|
||||
(flag_do_squangling): Likewise.
|
||||
* class.c (build_rtti_vtbl_entries): Remove old ABI support.
|
||||
* decl.c (grokfndecl): Likewise.
|
||||
* decl2.c (name_mangling_version): Remove.
|
||||
(flag_do_squangling): Likewise.
|
||||
(lang_f_options): Remove `squangle'.
|
||||
(unsupported_options): Add `squangle'.
|
||||
(cxx_decode_option): Issue a warning about uses of
|
||||
-fname-mangling-version.
|
||||
(finish_file): Remove old ABI support.
|
||||
* pt.c (check_explicit_specialization): Likewise.
|
||||
(tsubst_decl): Likewise.
|
||||
* rtti.c (init_rtti_processing): Likewise.
|
||||
(build_headof): Likewise.
|
||||
(get_tinfo_decl_dynamic): Likewise.
|
||||
(tinfo_from_decl): Likewise.
|
||||
(build_dynamic_cast_1): Likewise.
|
||||
(synthesize_tinfo_var): Likewise.
|
||||
* init.c (build_new): Allow enumeration types for the array-bounds
|
||||
in a direct-new-declarator.
|
||||
|
||||
|
@ -7766,35 +7766,16 @@ build_rtti_vtbl_entries (binfo, rtti_binfo, vid)
|
||||
}
|
||||
offset = size_diffop (BINFO_OFFSET (rtti_binfo), BINFO_OFFSET (b));
|
||||
|
||||
/* The second entry is, in the case of the new ABI, the address of
|
||||
the typeinfo object, or, in the case of the old ABI, a function
|
||||
which returns a typeinfo object. */
|
||||
if (new_abi_rtti_p ())
|
||||
{
|
||||
if (flag_rtti)
|
||||
decl = build_unary_op (ADDR_EXPR, get_tinfo_decl (t), 0);
|
||||
else
|
||||
decl = integer_zero_node;
|
||||
|
||||
/* Convert the declaration to a type that can be stored in the
|
||||
vtable. */
|
||||
init = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
|
||||
TREE_CONSTANT (init) = 1;
|
||||
}
|
||||
/* The second entry is the address of the typeinfo object. */
|
||||
if (flag_rtti)
|
||||
decl = build_unary_op (ADDR_EXPR, get_tinfo_decl (t), 0);
|
||||
else
|
||||
{
|
||||
if (flag_rtti)
|
||||
decl = get_tinfo_decl (t);
|
||||
else
|
||||
decl = abort_fndecl;
|
||||
|
||||
/* Convert the declaration to a type that can be stored in the
|
||||
vtable. */
|
||||
init = build1 (ADDR_EXPR, vfunc_ptr_type_node, decl);
|
||||
TREE_CONSTANT (init) = 1;
|
||||
init = build_vtable_entry (offset, NULL_TREE, init,
|
||||
/*generate_with_vtable_p=*/0);
|
||||
}
|
||||
decl = integer_zero_node;
|
||||
|
||||
/* Convert the declaration to a type that can be stored in the
|
||||
vtable. */
|
||||
init = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
|
||||
TREE_CONSTANT (init) = 1;
|
||||
*vid->last_init = build_tree_list (NULL_TREE, init);
|
||||
vid->last_init = &TREE_CHAIN (*vid->last_init);
|
||||
|
||||
|
@ -261,11 +261,6 @@ extern int flag_huge_objects;
|
||||
class). */
|
||||
#define all_overridden_vfuns_in_vtables_p() (1)
|
||||
|
||||
/* Nonzero if we use access type_info objects directly, and use the
|
||||
cross-vendor layout for them. Zero if we use an accessor function
|
||||
to get the type_info object address. */
|
||||
#define new_abi_rtti_p() (1)
|
||||
|
||||
/* Nonzero if primary and secondary vtables are combined into a single
|
||||
vtable. */
|
||||
#define merge_primary_and_secondary_vtables_p() (1)
|
||||
@ -1121,15 +1116,6 @@ extern int flag_ansi;
|
||||
|
||||
extern int flag_default_inline;
|
||||
|
||||
/* The name-mangling scheme to use. Versions of gcc before 2.8 use
|
||||
version 0. */
|
||||
extern int name_mangling_version;
|
||||
|
||||
/* Nonzero if squashed mangling is to be performed.
|
||||
This uses the B and K codes to reference previously seen class types
|
||||
and class qualifiers. */
|
||||
extern int flag_do_squangling;
|
||||
|
||||
/* Nonzero means generate separate instantiation control files and juggle
|
||||
them at link time. */
|
||||
extern int flag_use_repository;
|
||||
|
@ -8862,7 +8862,7 @@ grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
|
||||
/* Plain overloading: will not be grok'd by grokclassfn. */
|
||||
if (! ctype && ! processing_template_decl
|
||||
&& (! DECL_EXTERN_C_P (decl) || DECL_OVERLOADED_OPERATOR_P (decl))
|
||||
&& (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
|
||||
&& ! DECL_USE_TEMPLATE (decl))
|
||||
set_mangled_name_for_decl (decl);
|
||||
|
||||
if (funcdef_flag)
|
||||
|
@ -430,17 +430,6 @@ int flag_inline_trees = 0;
|
||||
|
||||
int max_tinst_depth = 50;
|
||||
|
||||
/* The name-mangling scheme to use. Must be 1 or greater to support
|
||||
template functions with identical types, but different template
|
||||
arguments. */
|
||||
int name_mangling_version = 2;
|
||||
|
||||
/* Nonzero if squashed mangling is to be performed.
|
||||
This uses the B and K codes to reference previously seen class types
|
||||
and class qualifiers. */
|
||||
|
||||
int flag_do_squangling;
|
||||
|
||||
/* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
|
||||
|
||||
int flag_vtable_gc;
|
||||
@ -507,7 +496,6 @@ lang_f_options[] =
|
||||
{"permissive", &flag_permissive, 1},
|
||||
{"repo", &flag_use_repository, 1},
|
||||
{"rtti", &flag_rtti, 1},
|
||||
{"squangle", &flag_do_squangling, 1},
|
||||
{"stats", &flag_detailed_statistics, 1},
|
||||
{"use-cxa-atexit", &flag_use_cxa_atexit, 1},
|
||||
{"vtable-gc", &flag_vtable_gc, 1},
|
||||
@ -525,8 +513,9 @@ static const char * const unsupported_options[] = {
|
||||
"enum-int-equiv",
|
||||
"guiding-decls",
|
||||
"nonnull-objects",
|
||||
"this-is-variable",
|
||||
"squangle",
|
||||
"strict-prototype",
|
||||
"this-is-variable",
|
||||
};
|
||||
|
||||
/* Compare two option strings, pointed two by P1 and P2, for use with
|
||||
@ -617,8 +606,10 @@ cxx_decode_option (argc, argv)
|
||||
= read_integral_parameter (option_value, p - 2, max_tinst_depth);
|
||||
else if ((option_value
|
||||
= skip_leading_substring (p, "name-mangling-version-")))
|
||||
name_mangling_version
|
||||
= read_integral_parameter (option_value, p - 2, name_mangling_version);
|
||||
{
|
||||
warning ("-fname-mangling-version is no longer supported");
|
||||
return 1;
|
||||
}
|
||||
else if ((option_value
|
||||
= skip_leading_substring (p, "dump-translation-unit=")))
|
||||
{
|
||||
@ -3581,8 +3572,7 @@ finish_file ()
|
||||
|
||||
timevar_push (TV_VARCONST);
|
||||
|
||||
if (new_abi_rtti_p ())
|
||||
emit_support_tinfos ();
|
||||
emit_support_tinfos ();
|
||||
|
||||
do
|
||||
{
|
||||
@ -3602,8 +3592,7 @@ finish_file ()
|
||||
|
||||
/* Write out needed type info variables. Writing out one variable
|
||||
might cause others to be needed. */
|
||||
if (new_abi_rtti_p ()
|
||||
&& walk_globals (tinfo_decl_p, emit_tinfo_decl, /*data=*/0))
|
||||
if (walk_globals (tinfo_decl_p, emit_tinfo_decl, /*data=*/0))
|
||||
reconsider = 1;
|
||||
|
||||
/* The list of objects with static storage duration is built up
|
||||
|
@ -1693,8 +1693,7 @@ check_explicit_specialization (declarator, decl, template_count, flags)
|
||||
treatment. We do this here so that the ordinary,
|
||||
non-template, name-mangling algorithm will not be used
|
||||
later. */
|
||||
if ((is_member_template (tmpl) || ctype == NULL_TREE)
|
||||
&& name_mangling_version >= 1)
|
||||
if (is_member_template (tmpl) || ctype == NULL_TREE)
|
||||
set_mangled_name_for_template_decl (decl);
|
||||
|
||||
if (is_friend && !have_def)
|
||||
@ -5879,8 +5878,7 @@ tsubst_decl (t, args, type)
|
||||
|
||||
/* TMPL will be NULL if this is a specialization of a
|
||||
member function of a template class. */
|
||||
if (name_mangling_version < 1
|
||||
|| tmpl == NULL_TREE
|
||||
if (tmpl == NULL_TREE
|
||||
|| (member && !is_member_template (tmpl)
|
||||
&& !DECL_TEMPLATE_INFO (tmpl)))
|
||||
set_mangled_name_for_decl (r);
|
||||
|
116
gcc/cp/rtti.c
116
gcc/cp/rtti.c
@ -79,24 +79,11 @@ init_rtti_processing ()
|
||||
(class_type_node, get_identifier ("type_info"), 1);
|
||||
if (flag_honor_std)
|
||||
pop_namespace ();
|
||||
if (!new_abi_rtti_p ())
|
||||
{
|
||||
tinfo_decl_id = get_identifier ("__tf");
|
||||
tinfo_decl_type = build_function_type
|
||||
(build_reference_type
|
||||
(build_qualified_type
|
||||
(type_info_type_node, TYPE_QUAL_CONST)),
|
||||
void_list_node);
|
||||
tinfo_var_id = get_identifier ("__ti");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FIXME: These identifier prefixes are not set in stone yet. */
|
||||
tinfo_decl_id = get_identifier ("__ti");
|
||||
tinfo_var_id = get_identifier ("__tn");
|
||||
tinfo_decl_type = build_qualified_type
|
||||
(type_info_type_node, TYPE_QUAL_CONST);
|
||||
}
|
||||
/* FIXME: These identifier prefixes are not set in stone yet. */
|
||||
tinfo_decl_id = get_identifier ("__ti");
|
||||
tinfo_var_id = get_identifier ("__tn");
|
||||
tinfo_decl_type =
|
||||
build_qualified_type (type_info_type_node, TYPE_QUAL_CONST);
|
||||
}
|
||||
|
||||
/* Given a pointer to an object with at least one virtual table
|
||||
@ -150,11 +137,7 @@ build_headof (exp)
|
||||
|
||||
/* Under the new ABI, the offset-to-top field is at index -2 from
|
||||
the vptr. */
|
||||
if (new_abi_rtti_p ())
|
||||
index = build_int_2 (-2, -1);
|
||||
/* But under the old ABI, it is at offset zero. */
|
||||
else
|
||||
index = integer_zero_node;
|
||||
index = build_int_2 (-2, -1);
|
||||
|
||||
aref = build_vtbl_ref (build_indirect_ref (exp, NULL_PTR), index);
|
||||
|
||||
@ -253,14 +236,8 @@ get_tinfo_decl_dynamic (exp)
|
||||
exp = build_indirect_ref (exp, NULL_PTR);
|
||||
}
|
||||
|
||||
/* The RTTI information is always in the vtable, but it's at
|
||||
different indices depending on the ABI. */
|
||||
if (new_abi_rtti_p ())
|
||||
index = integer_minus_one_node;
|
||||
else if (flag_vtable_thunks)
|
||||
index = integer_one_node;
|
||||
else
|
||||
index = integer_zero_node;
|
||||
/* The RTTI information is at index -1. */
|
||||
index = integer_minus_one_node;
|
||||
t = build_vfn_ref ((tree *) 0, exp, index);
|
||||
TREE_TYPE (t) = build_pointer_type (tinfo_decl_type);
|
||||
return t;
|
||||
@ -397,9 +374,7 @@ tinfo_from_decl (expr)
|
||||
{
|
||||
tree t;
|
||||
|
||||
if (!new_abi_rtti_p ())
|
||||
t = build_call (expr, NULL_TREE);
|
||||
else if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
|
||||
if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
|
||||
t = build_indirect_ref (expr, NULL);
|
||||
else
|
||||
t = expr;
|
||||
@ -717,67 +692,34 @@ build_dynamic_cast_1 (type, expr)
|
||||
if (tc == REFERENCE_TYPE)
|
||||
expr1 = build_unary_op (ADDR_EXPR, expr1, 0);
|
||||
|
||||
if (!new_abi_rtti_p ())
|
||||
{
|
||||
tree expr2 = build_headof (expr1);
|
||||
tree td1 = expr;
|
||||
|
||||
if (tc == POINTER_TYPE)
|
||||
td1 = build_indirect_ref (td1, NULL_PTR);
|
||||
td1 = get_tinfo_decl_dynamic (td1);
|
||||
|
||||
elems = tree_cons
|
||||
(NULL_TREE, td1, tree_cons
|
||||
(NULL_TREE, td2, tree_cons
|
||||
(NULL_TREE, boff, tree_cons
|
||||
(NULL_TREE, expr2, tree_cons
|
||||
(NULL_TREE, td3, tree_cons
|
||||
(NULL_TREE, expr1, NULL_TREE))))));
|
||||
}
|
||||
else
|
||||
elems = tree_cons
|
||||
(NULL_TREE, expr1, tree_cons
|
||||
(NULL_TREE, td3, tree_cons
|
||||
(NULL_TREE, td2, tree_cons
|
||||
(NULL_TREE, boff, NULL_TREE))));
|
||||
elems = tree_cons
|
||||
(NULL_TREE, expr1, tree_cons
|
||||
(NULL_TREE, td3, tree_cons
|
||||
(NULL_TREE, td2, tree_cons
|
||||
(NULL_TREE, boff, NULL_TREE))));
|
||||
|
||||
dcast_fn = dynamic_cast_node;
|
||||
if (!dcast_fn)
|
||||
{
|
||||
tree tmp;
|
||||
tree tinfo_ptr;
|
||||
tree ns = new_abi_rtti_p () ? abi_node : global_namespace;
|
||||
tree ns = abi_node;
|
||||
const char *name;
|
||||
|
||||
push_nested_namespace (ns);
|
||||
if (!new_abi_rtti_p ())
|
||||
{
|
||||
tinfo_ptr = build_pointer_type (tinfo_decl_type);
|
||||
name = "__dynamic_cast_2";
|
||||
tmp = tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, integer_type_node, tree_cons
|
||||
(NULL_TREE, ptr_type_node, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, ptr_type_node, void_list_node))))));
|
||||
}
|
||||
else
|
||||
{
|
||||
tinfo_ptr = xref_tag (class_type_node,
|
||||
get_identifier ("__class_type_info"),
|
||||
1);
|
||||
|
||||
tinfo_ptr = build_pointer_type
|
||||
(build_qualified_type
|
||||
(tinfo_ptr, TYPE_QUAL_CONST));
|
||||
name = "__dynamic_cast";
|
||||
tmp = tree_cons
|
||||
(NULL_TREE, const_ptr_type_node, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, ptrdiff_type_node, void_list_node))));
|
||||
}
|
||||
tinfo_ptr = xref_tag (class_type_node,
|
||||
get_identifier ("__class_type_info"),
|
||||
1);
|
||||
|
||||
tinfo_ptr = build_pointer_type
|
||||
(build_qualified_type
|
||||
(tinfo_ptr, TYPE_QUAL_CONST));
|
||||
name = "__dynamic_cast";
|
||||
tmp = tree_cons
|
||||
(NULL_TREE, const_ptr_type_node, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, tinfo_ptr, tree_cons
|
||||
(NULL_TREE, ptrdiff_type_node, void_list_node))));
|
||||
tmp = build_function_type (ptr_type_node, tmp);
|
||||
dcast_fn = build_library_fn_ptr (name, tmp);
|
||||
pop_nested_namespace (ns);
|
||||
@ -1134,8 +1076,6 @@ synthesize_tinfo_var (target_type, real_name)
|
||||
tree var_type = NULL_TREE;
|
||||
int non_public = 0;
|
||||
|
||||
my_friendly_assert (new_abi_rtti_p (), 20000118);
|
||||
|
||||
switch (TREE_CODE (target_type))
|
||||
{
|
||||
case POINTER_TYPE:
|
||||
|
@ -173,9 +173,9 @@ in the following sections.
|
||||
-fhuge-objects -fno-implicit-templates @gol
|
||||
-fno-implicit-inline-templates @gol
|
||||
-fno-implement-inlines -fms-extensions @gol
|
||||
-fname-mangling-version-@var{n} -fno-operator-names @gol
|
||||
-fno-operator-names @gol
|
||||
-fno-optional-diags -fpermissive @gol
|
||||
-frepo -fno-rtti -fsquangle -ftemplate-depth-@var{n} @gol
|
||||
-frepo -fno-rtti -ftemplate-depth-@var{n} @gol
|
||||
-fuse-cxa-atexit -fvtable-thunks -nostdinc++ @gol
|
||||
-fno-default-inline -Wctor-dtor-privacy @gol
|
||||
-Wnon-virtual-dtor -Wreorder @gol
|
||||
@ -1318,20 +1318,6 @@ errors if these functions are not inlined everywhere they are called.
|
||||
Disable pedantic warnings about constructs used in MFC, such as implicit
|
||||
int and getting a pointer to member function via non-standard syntax.
|
||||
|
||||
@item -fname-mangling-version-@var{n}
|
||||
Control the way in which names are mangled. Version 0 is compatible
|
||||
with versions of g++ before 2.8. Version 1 is the default. Version 1
|
||||
will allow correct mangling of function templates. For example,
|
||||
version 0 mangling does not mangle foo<int, double> and foo<int, char>
|
||||
given this declaration:
|
||||
|
||||
@example
|
||||
template <class T, class U> void foo(T t);
|
||||
@end example
|
||||
|
||||
Like all options that change the ABI, all C++ code, @emph{including
|
||||
libgcc} must be built with the same setting of this option.
|
||||
|
||||
@item -fno-operator-names
|
||||
Do not treat the operator name keywords @code{and}, @code{bitand},
|
||||
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
|
||||
@ -1361,18 +1347,6 @@ of the language, you can save some space by using this flag. Note that
|
||||
exception handling uses the same information, but it will generate it as
|
||||
needed.
|
||||
|
||||
@item -fsquangle
|
||||
@itemx -fno-squangle
|
||||
@samp{-fsquangle} will enable a compressed form of name mangling for
|
||||
identifiers. In particular, it helps to shorten very long names by recognizing
|
||||
types and class names which occur more than once, replacing them with special
|
||||
short ID codes. This option also requires any C++ libraries being used to
|
||||
be compiled with this option as well. The compiler has this disabled (the
|
||||
equivalent of @samp{-fno-squangle}) by default.
|
||||
|
||||
Like all options that change the ABI, all C++ code, @emph{including
|
||||
libgcc.a} must be built with the same setting of this option.
|
||||
|
||||
@item -ftemplate-depth-@var{n}
|
||||
Set the maximum instantiation depth for template classes to @var{n}.
|
||||
A limit on the template instantiation depth is needed to detect
|
||||
|
@ -1,5 +1,4 @@
|
||||
// Test for proper mangling by setting up name clashes.
|
||||
// Special g++ Options: -fno-squangle
|
||||
|
||||
#if (!defined (__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100)
|
||||
#define NAME(OLD, NEW) OLD
|
||||
|
@ -1,5 +1,4 @@
|
||||
// Build don't link:
|
||||
// Special g++ Options: -fno-squangle
|
||||
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
#if (!defined (__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100)
|
||||
|
Loading…
Reference in New Issue
Block a user