* 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
+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
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.
}
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);
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)
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;
/* 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)
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;
{"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},
"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
= 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=")))
{
timevar_push (TV_VARCONST);
- if (new_abi_rtti_p ())
- emit_support_tinfos ();
+ emit_support_tinfos ();
do
{
/* 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
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)
/* 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);
(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
/* 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);
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;
{
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;
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);
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:
-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
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
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
// 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
// Build don't link:
-// Special g++ Options: -fno-squangle
// Origin: Mark Mitchell <mark@codesourcery.com>
#if (!defined (__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100)