mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-04 17:24:15 +08:00
Remove traditional C constructs 4/n.
* decl2.c (grok_method_quals, warn_if_unknown_interface, grok_x_components, cp_build_parm_decl, build_artificial_parm, maybe_retrofit_in_chrg, grokclassfn, grok_array_decl, delete_sanity, check_member_template, check_java_method, check_classfn, finish_static_data_member_decl, grokfield, grokbitfield, grokoptypename, grok_function_init, cplus_decl_attributes, constructor_name, defer_fn, build_anon_union_vars, finish_anon_union, coerce_new_type, coerce_delete_type, comdat_linkage, maybe_make_one_only, key_method, import_export_vtable, import_export_class, output_vtable_inherit, import_export_decl, import_export_tinfo, build_cleanup, get_guard, get_guard_bits, get_guard_cond, set_guard, start_objects, finish_objects, start_static_storage_duration_function, finish_static_storage_duration_function, get_priority_info, start_static_initialization_or_destruction, finish_static_initialization_or_destruction, do_static_initialization, do_static_destruction, prune_vars_needing_no_initialization, write_out_vars, reparse_decl_as_expr, finish_decl_parsing, namespace_ancestor, add_using_namespace, merge_functions, ambiguous_decl, lookup_using_namespace, lookup_using_namespace, qualified_lookup_using_namespace, set_decl_namespace, decl_namespace, current_decl_namespace, push_decl_namespace, pop_decl_namespace, push_scope, pop_scope, add_function, arg_assoc_namespace, arg_assoc_template_arg, arg_assoc, lookup_arg_dependent, do_namespace_alias, validate_nonmember_using_decl, do_nonmember_using_decl, do_toplevel_using_decl, do_local_using_decl, do_class_using_decl, do_using_directive, check_default_args, mark_used, handle_class_head): Use C90 prototypings. Use booleans. * parser.c (cp_parser_class_head): Use booleanss. * decl.c (walk_globals, walk_vtables): Likewise. * cp-tree.h (walk_globals_pred, walk_globals_fn, walk_vtables, walk_globals): Change return type from 'int' to 'bool'. * rtti.c (init_rtti_processing, build_headof, throw_bad_cast throw_bad_typeid, get_tinfo_decl_dynamic, typeid_ok_p, build_typeid, tinfo_name, get_tinfo_decl, get_tinfo_ptr, get_typeid, ifnonnull, build_dynamic_cast_1, build_dynamic_cast, qualifier_flags, tinfo_base_init, generic_initializer, ptr_initializer, dfs_class_hint_mark, ptm_initializer, dfs_class_hint_unmark, class_hint_flags, class_initializer, typeinfo_in_lib_p, get_pseudo_ti_init, create_pseudo_type_info, get_pseudo_ti_desc, create_tinfo_types, emit_support_tinfos, unemitted_tinfo_decl_p, emit_tinfo_decl): Likewise. * repo.c (repo_compile_flags, repo_template_declared, repo_template_defined, repo_class_defined, repo_get_id, repo_template_used, repo_vtable_used, repo_inline_used, repo_tinfo_used, repo_template_instantiated, extract_string, open_repo_file, afgets, init_repo, reopen_repo_file_for_write, finish_repo): Likewise. * ptree.c (cxx_print_decl, cxx_print_type, cxx_print_identifier, cxx_print_xnode): Likewise.. * cp-lang.c (ok_to_generate_alias_set_for_type, cxx_get_alias_set, cxx_warn_unused_global_decl, cp_expr_size): Likewise. * cxxfilt.c (demangle_it, print_demangler_list, usage, standard_symbol_characters, hp_symbol_characters, main, fatal): Likewise. (strip_underscore): Change type from 'int' to 'bool'. (main): Use boolean constants. From-SVN: r60601
This commit is contained in:
parent
2873836bd9
commit
848eed9249
@ -1,3 +1,67 @@
|
|||||||
|
2002-12-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||||
|
|
||||||
|
Remove traditional C constructs 4/n.
|
||||||
|
* decl2.c (grok_method_quals, warn_if_unknown_interface,
|
||||||
|
grok_x_components, cp_build_parm_decl, build_artificial_parm,
|
||||||
|
maybe_retrofit_in_chrg, grokclassfn, grok_array_decl,
|
||||||
|
delete_sanity, check_member_template, check_java_method,
|
||||||
|
check_classfn, finish_static_data_member_decl, grokfield,
|
||||||
|
grokbitfield, grokoptypename, grok_function_init,
|
||||||
|
cplus_decl_attributes, constructor_name, defer_fn,
|
||||||
|
build_anon_union_vars, finish_anon_union, coerce_new_type,
|
||||||
|
coerce_delete_type, comdat_linkage, maybe_make_one_only,
|
||||||
|
key_method, import_export_vtable, import_export_class,
|
||||||
|
output_vtable_inherit, import_export_decl, import_export_tinfo,
|
||||||
|
build_cleanup, get_guard, get_guard_bits, get_guard_cond,
|
||||||
|
set_guard, start_objects, finish_objects,
|
||||||
|
start_static_storage_duration_function,
|
||||||
|
finish_static_storage_duration_function, get_priority_info,
|
||||||
|
start_static_initialization_or_destruction,
|
||||||
|
finish_static_initialization_or_destruction,
|
||||||
|
do_static_initialization, do_static_destruction,
|
||||||
|
prune_vars_needing_no_initialization, write_out_vars,
|
||||||
|
reparse_decl_as_expr, finish_decl_parsing, namespace_ancestor,
|
||||||
|
add_using_namespace, merge_functions, ambiguous_decl,
|
||||||
|
lookup_using_namespace, lookup_using_namespace,
|
||||||
|
qualified_lookup_using_namespace, set_decl_namespace,
|
||||||
|
decl_namespace, current_decl_namespace, push_decl_namespace,
|
||||||
|
pop_decl_namespace, push_scope, pop_scope, add_function,
|
||||||
|
arg_assoc_namespace, arg_assoc_template_arg, arg_assoc,
|
||||||
|
lookup_arg_dependent, do_namespace_alias,
|
||||||
|
validate_nonmember_using_decl, do_nonmember_using_decl,
|
||||||
|
do_toplevel_using_decl, do_local_using_decl,
|
||||||
|
do_class_using_decl, do_using_directive, check_default_args,
|
||||||
|
mark_used, handle_class_head): Use C90 prototypings. Use booleans.
|
||||||
|
* parser.c (cp_parser_class_head): Use booleanss.
|
||||||
|
* decl.c (walk_globals, walk_vtables): Likewise.
|
||||||
|
* cp-tree.h (walk_globals_pred, walk_globals_fn, walk_vtables,
|
||||||
|
walk_globals): Change return type from 'int' to 'bool'.
|
||||||
|
* rtti.c (init_rtti_processing, build_headof, throw_bad_cast
|
||||||
|
throw_bad_typeid, get_tinfo_decl_dynamic, typeid_ok_p,
|
||||||
|
build_typeid, tinfo_name, get_tinfo_decl, get_tinfo_ptr,
|
||||||
|
get_typeid, ifnonnull, build_dynamic_cast_1, build_dynamic_cast,
|
||||||
|
qualifier_flags, tinfo_base_init, generic_initializer,
|
||||||
|
ptr_initializer, dfs_class_hint_mark, ptm_initializer,
|
||||||
|
dfs_class_hint_unmark, class_hint_flags, class_initializer,
|
||||||
|
typeinfo_in_lib_p, get_pseudo_ti_init, create_pseudo_type_info,
|
||||||
|
get_pseudo_ti_desc, create_tinfo_types, emit_support_tinfos,
|
||||||
|
unemitted_tinfo_decl_p, emit_tinfo_decl): Likewise.
|
||||||
|
* repo.c (repo_compile_flags, repo_template_declared,
|
||||||
|
repo_template_defined, repo_class_defined, repo_get_id,
|
||||||
|
repo_template_used, repo_vtable_used, repo_inline_used,
|
||||||
|
repo_tinfo_used, repo_template_instantiated, extract_string,
|
||||||
|
open_repo_file, afgets, init_repo, reopen_repo_file_for_write,
|
||||||
|
finish_repo): Likewise.
|
||||||
|
* ptree.c (cxx_print_decl, cxx_print_type, cxx_print_identifier,
|
||||||
|
cxx_print_xnode): Likewise..
|
||||||
|
* cp-lang.c (ok_to_generate_alias_set_for_type, cxx_get_alias_set,
|
||||||
|
cxx_warn_unused_global_decl, cp_expr_size): Likewise.
|
||||||
|
* cxxfilt.c (demangle_it, print_demangler_list, usage,
|
||||||
|
standard_symbol_characters, hp_symbol_characters, main, fatal):
|
||||||
|
Likewise.
|
||||||
|
(strip_underscore): Change type from 'int' to 'bool'.
|
||||||
|
(main): Use boolean constants.
|
||||||
|
|
||||||
2002-12-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
2002-12-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||||
|
|
||||||
Remove traditional C constructs 3/n.
|
Remove traditional C constructs 3/n.
|
||||||
|
@ -30,11 +30,11 @@ Boston, MA 02111-1307, USA. */
|
|||||||
#include "langhooks.h"
|
#include "langhooks.h"
|
||||||
#include "langhooks-def.h"
|
#include "langhooks-def.h"
|
||||||
|
|
||||||
static HOST_WIDE_INT cxx_get_alias_set PARAMS ((tree));
|
static HOST_WIDE_INT cxx_get_alias_set (tree);
|
||||||
static bool ok_to_generate_alias_set_for_type PARAMS ((tree));
|
static bool ok_to_generate_alias_set_for_type (tree);
|
||||||
static bool cxx_warn_unused_global_decl PARAMS ((tree));
|
static bool cxx_warn_unused_global_decl (tree);
|
||||||
static tree cp_expr_size PARAMS ((tree));
|
static tree cp_expr_size (tree);
|
||||||
static bool cp_var_mod_type_p PARAMS ((tree));
|
static bool cp_var_mod_type_p (tree);
|
||||||
|
|
||||||
#undef LANG_HOOKS_NAME
|
#undef LANG_HOOKS_NAME
|
||||||
#define LANG_HOOKS_NAME "GNU C++"
|
#define LANG_HOOKS_NAME "GNU C++"
|
||||||
@ -204,8 +204,7 @@ const char *const tree_code_name[] = {
|
|||||||
Return TRUE if T safe for aliasing FALSE otherwise. */
|
Return TRUE if T safe for aliasing FALSE otherwise. */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
ok_to_generate_alias_set_for_type (t)
|
ok_to_generate_alias_set_for_type (tree t)
|
||||||
tree t;
|
|
||||||
{
|
{
|
||||||
if (TYPE_PTRMEMFUNC_P (t))
|
if (TYPE_PTRMEMFUNC_P (t))
|
||||||
return true;
|
return true;
|
||||||
@ -258,8 +257,7 @@ ok_to_generate_alias_set_for_type (t)
|
|||||||
/* Special routine to get the alias set for C++. */
|
/* Special routine to get the alias set for C++. */
|
||||||
|
|
||||||
static HOST_WIDE_INT
|
static HOST_WIDE_INT
|
||||||
cxx_get_alias_set (t)
|
cxx_get_alias_set (tree t)
|
||||||
tree t;
|
|
||||||
{
|
{
|
||||||
/* It's not yet safe to use alias sets for classes in C++. */
|
/* It's not yet safe to use alias sets for classes in C++. */
|
||||||
if (!ok_to_generate_alias_set_for_type(t))
|
if (!ok_to_generate_alias_set_for_type(t))
|
||||||
@ -271,8 +269,7 @@ cxx_get_alias_set (t)
|
|||||||
/* Called from check_global_declarations. */
|
/* Called from check_global_declarations. */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
cxx_warn_unused_global_decl (decl)
|
cxx_warn_unused_global_decl (tree decl)
|
||||||
tree decl;
|
|
||||||
{
|
{
|
||||||
if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl))
|
if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl))
|
||||||
return false;
|
return false;
|
||||||
@ -291,8 +288,7 @@ cxx_warn_unused_global_decl (decl)
|
|||||||
might have allocated something there. */
|
might have allocated something there. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
cp_expr_size (exp)
|
cp_expr_size (tree exp)
|
||||||
tree exp;
|
|
||||||
{
|
{
|
||||||
if (CLASS_TYPE_P (TREE_TYPE (exp)))
|
if (CLASS_TYPE_P (TREE_TYPE (exp)))
|
||||||
{
|
{
|
||||||
|
134
gcc/cp/cp-tree.h
134
gcc/cp/cp-tree.h
@ -3620,10 +3620,10 @@ extern void pop_lang_context PARAMS ((void));
|
|||||||
extern tree instantiate_type PARAMS ((tree, tree, tsubst_flags_t));
|
extern tree instantiate_type PARAMS ((tree, tree, tsubst_flags_t));
|
||||||
extern void print_class_statistics PARAMS ((void));
|
extern void print_class_statistics PARAMS ((void));
|
||||||
extern void cxx_print_statistics PARAMS ((void));
|
extern void cxx_print_statistics PARAMS ((void));
|
||||||
extern void cxx_print_xnode PARAMS ((FILE *, tree, int));
|
extern void cxx_print_xnode (FILE *, tree, int);
|
||||||
extern void cxx_print_decl PARAMS ((FILE *, tree, int));
|
extern void cxx_print_decl (FILE *, tree, int);
|
||||||
extern void cxx_print_type PARAMS ((FILE *, tree, int));
|
extern void cxx_print_type (FILE *, tree, int);
|
||||||
extern void cxx_print_identifier PARAMS ((FILE *, tree, int));
|
extern void cxx_print_identifier (FILE *, tree, int);
|
||||||
extern void cxx_print_error_function PARAMS ((struct diagnostic_context *,
|
extern void cxx_print_error_function PARAMS ((struct diagnostic_context *,
|
||||||
const char *));
|
const char *));
|
||||||
extern void build_self_reference PARAMS ((void));
|
extern void build_self_reference PARAMS ((void));
|
||||||
@ -3738,8 +3738,8 @@ extern void end_only_namespace_names PARAMS ((void));
|
|||||||
extern tree namespace_ancestor PARAMS ((tree, tree));
|
extern tree namespace_ancestor PARAMS ((tree, tree));
|
||||||
extern tree unqualified_namespace_lookup PARAMS ((tree, int, tree *));
|
extern tree unqualified_namespace_lookup PARAMS ((tree, int, tree *));
|
||||||
extern tree check_for_out_of_scope_variable (tree);
|
extern tree check_for_out_of_scope_variable (tree);
|
||||||
extern int lookup_using_namespace PARAMS ((tree, tree, tree, tree, int, tree *));
|
extern bool lookup_using_namespace (tree, tree, tree, tree, int, tree *);
|
||||||
extern int qualified_lookup_using_namespace PARAMS ((tree, tree, tree, int));
|
extern bool qualified_lookup_using_namespace (tree, tree, tree, int);
|
||||||
extern tree build_library_fn PARAMS ((tree, tree));
|
extern tree build_library_fn PARAMS ((tree, tree));
|
||||||
extern tree build_library_fn_ptr PARAMS ((const char *, tree));
|
extern tree build_library_fn_ptr PARAMS ((const char *, tree));
|
||||||
extern tree build_cp_library_fn_ptr PARAMS ((const char *, tree));
|
extern tree build_cp_library_fn_ptr PARAMS ((const char *, tree));
|
||||||
@ -3795,14 +3795,10 @@ extern void storetags PARAMS ((tree));
|
|||||||
extern int vtable_decl_p PARAMS ((tree, void *));
|
extern int vtable_decl_p PARAMS ((tree, void *));
|
||||||
extern int vtype_decl_p PARAMS ((tree, void *));
|
extern int vtype_decl_p PARAMS ((tree, void *));
|
||||||
extern int sigtable_decl_p PARAMS ((tree, void *));
|
extern int sigtable_decl_p PARAMS ((tree, void *));
|
||||||
typedef int (*walk_globals_pred) PARAMS ((tree, void *));
|
typedef bool (*walk_globals_pred) (tree, void *);
|
||||||
typedef int (*walk_globals_fn) PARAMS ((tree *, void *));
|
typedef bool (*walk_globals_fn) (tree *, void *);
|
||||||
extern int walk_globals PARAMS ((walk_globals_pred,
|
extern bool walk_globals (walk_globals_pred, walk_globals_fn, void *);
|
||||||
walk_globals_fn,
|
extern bool walk_vtables (walk_globals_pred, walk_globals_fn, void *);
|
||||||
void *));
|
|
||||||
extern int walk_vtables PARAMS ((walk_globals_pred,
|
|
||||||
walk_globals_fn,
|
|
||||||
void *));
|
|
||||||
typedef int (*walk_namespaces_fn) PARAMS ((tree, void *));
|
typedef int (*walk_namespaces_fn) PARAMS ((tree, void *));
|
||||||
extern int walk_namespaces PARAMS ((walk_namespaces_fn,
|
extern int walk_namespaces PARAMS ((walk_namespaces_fn,
|
||||||
void *));
|
void *));
|
||||||
@ -3820,34 +3816,34 @@ extern tree cp_fname_init PARAMS ((const char *));
|
|||||||
extern bool have_extern_spec;
|
extern bool have_extern_spec;
|
||||||
|
|
||||||
/* in decl2.c */
|
/* in decl2.c */
|
||||||
extern int check_java_method PARAMS ((tree));
|
extern bool check_java_method (tree);
|
||||||
extern int grok_method_quals PARAMS ((tree, tree, tree));
|
extern int grok_method_quals (tree, tree, tree);
|
||||||
extern void warn_if_unknown_interface PARAMS ((tree));
|
extern void warn_if_unknown_interface (tree);
|
||||||
extern void grok_x_components PARAMS ((tree));
|
extern void grok_x_components (tree);
|
||||||
extern void maybe_retrofit_in_chrg PARAMS ((tree));
|
extern void maybe_retrofit_in_chrg (tree);
|
||||||
extern void maybe_make_one_only PARAMS ((tree));
|
extern void maybe_make_one_only (tree);
|
||||||
extern void grokclassfn PARAMS ((tree, tree, enum overload_flags, tree));
|
extern void grokclassfn (tree, tree, enum overload_flags, tree);
|
||||||
extern tree grok_array_decl PARAMS ((tree, tree));
|
extern tree grok_array_decl (tree, tree);
|
||||||
extern tree delete_sanity PARAMS ((tree, tree, int, int));
|
extern tree delete_sanity (tree, tree, int, int);
|
||||||
extern tree check_classfn PARAMS ((tree, tree));
|
extern tree check_classfn (tree, tree);
|
||||||
extern void check_member_template PARAMS ((tree));
|
extern void check_member_template (tree);
|
||||||
extern tree grokfield PARAMS ((tree, tree, tree, tree, tree));
|
extern tree grokfield (tree, tree, tree, tree, tree);
|
||||||
extern tree grokbitfield PARAMS ((tree, tree, tree));
|
extern tree grokbitfield (tree, tree, tree);
|
||||||
extern tree groktypefield PARAMS ((tree, tree));
|
extern tree groktypefield PARAMS ((tree, tree));
|
||||||
extern tree grokoptypename PARAMS ((tree, tree, tree));
|
extern tree grokoptypename (tree, tree, tree);
|
||||||
extern void cplus_decl_attributes PARAMS ((tree *, tree, int));
|
extern void cplus_decl_attributes (tree *, tree, int);
|
||||||
extern tree constructor_name_full PARAMS ((tree));
|
extern tree constructor_name_full PARAMS ((tree));
|
||||||
extern tree constructor_name PARAMS ((tree));
|
extern tree constructor_name (tree);
|
||||||
extern bool constructor_name_p (tree, tree);
|
extern bool constructor_name_p (tree, tree);
|
||||||
extern void defer_fn PARAMS ((tree));
|
extern void defer_fn (tree);
|
||||||
extern void finish_anon_union PARAMS ((tree));
|
extern void finish_anon_union (tree);
|
||||||
extern tree finish_table PARAMS ((tree, tree, tree, int));
|
extern tree finish_table (tree, tree, tree, int);
|
||||||
extern tree coerce_new_type PARAMS ((tree));
|
extern tree coerce_new_type (tree);
|
||||||
extern tree coerce_delete_type PARAMS ((tree));
|
extern tree coerce_delete_type (tree);
|
||||||
extern void comdat_linkage PARAMS ((tree));
|
extern void comdat_linkage (tree);
|
||||||
extern void import_export_vtable PARAMS ((tree, tree, int));
|
extern void import_export_vtable (tree, tree, int);
|
||||||
extern void import_export_decl PARAMS ((tree));
|
extern void import_export_decl (tree);
|
||||||
extern void import_export_tinfo PARAMS ((tree, tree, int));
|
extern void import_export_tinfo (tree, tree, bool);
|
||||||
extern tree build_cleanup PARAMS ((tree));
|
extern tree build_cleanup PARAMS ((tree));
|
||||||
extern void finish_file PARAMS ((void));
|
extern void finish_file PARAMS ((void));
|
||||||
extern tree reparse_absdcl_as_expr PARAMS ((tree, tree));
|
extern tree reparse_absdcl_as_expr PARAMS ((tree, tree));
|
||||||
@ -3855,29 +3851,29 @@ extern tree reparse_absdcl_as_casts PARAMS ((tree, tree));
|
|||||||
extern tree build_expr_from_tree PARAMS ((tree));
|
extern tree build_expr_from_tree PARAMS ((tree));
|
||||||
extern tree build_offset_ref_call_from_tree (tree, tree);
|
extern tree build_offset_ref_call_from_tree (tree, tree);
|
||||||
extern tree build_call_from_tree (tree, tree, bool);
|
extern tree build_call_from_tree (tree, tree, bool);
|
||||||
extern tree reparse_decl_as_expr PARAMS ((tree, tree));
|
extern tree reparse_decl_as_expr (tree, tree);
|
||||||
extern tree finish_decl_parsing PARAMS ((tree));
|
extern tree finish_decl_parsing (tree);
|
||||||
extern void set_decl_namespace PARAMS ((tree, tree, int));
|
extern void set_decl_namespace (tree, tree, bool);
|
||||||
extern tree current_decl_namespace PARAMS ((void));
|
extern tree current_decl_namespace PARAMS ((void));
|
||||||
extern void push_decl_namespace PARAMS ((tree));
|
extern void push_decl_namespace PARAMS ((tree));
|
||||||
extern void pop_decl_namespace PARAMS ((void));
|
extern void pop_decl_namespace PARAMS ((void));
|
||||||
extern void push_scope PARAMS ((tree));
|
extern void push_scope PARAMS ((tree));
|
||||||
extern void pop_scope PARAMS ((tree));
|
extern void pop_scope PARAMS ((tree));
|
||||||
extern void do_namespace_alias PARAMS ((tree, tree));
|
extern void do_namespace_alias (tree, tree);
|
||||||
extern void do_toplevel_using_decl PARAMS ((tree));
|
extern void do_toplevel_using_decl (tree);
|
||||||
extern void do_local_using_decl PARAMS ((tree));
|
extern void do_local_using_decl (tree);
|
||||||
extern tree do_class_using_decl PARAMS ((tree));
|
extern tree do_class_using_decl (tree);
|
||||||
extern void do_using_directive PARAMS ((tree));
|
extern void do_using_directive (tree);
|
||||||
extern void check_default_args PARAMS ((tree));
|
extern void check_default_args (tree);
|
||||||
extern void mark_used PARAMS ((tree));
|
extern void mark_used (tree);
|
||||||
extern tree handle_class_head (enum tag_types, tree, tree, tree, int, int *);
|
extern tree handle_class_head (enum tag_types, tree, tree, tree, bool, bool *);
|
||||||
extern tree lookup_arg_dependent PARAMS ((tree, tree, tree));
|
extern tree lookup_arg_dependent (tree, tree, tree);
|
||||||
extern void finish_static_data_member_decl PARAMS ((tree, tree, tree, int));
|
extern void finish_static_data_member_decl (tree, tree, tree, int);
|
||||||
extern tree cp_build_parm_decl PARAMS ((tree, tree));
|
extern tree cp_build_parm_decl (tree, tree);
|
||||||
extern tree build_artificial_parm PARAMS ((tree, tree));
|
extern tree build_artificial_parm (tree, tree);
|
||||||
extern tree get_guard PARAMS ((tree));
|
extern tree get_guard (tree);
|
||||||
extern tree get_guard_cond PARAMS ((tree));
|
extern tree get_guard_cond (tree);
|
||||||
extern tree set_guard PARAMS ((tree));
|
extern tree set_guard (tree);
|
||||||
|
|
||||||
extern void cp_error_at PARAMS ((const char *msgid, ...));
|
extern void cp_error_at PARAMS ((const char *msgid, ...));
|
||||||
extern void cp_warning_at PARAMS ((const char *msgid, ...));
|
extern void cp_warning_at PARAMS ((const char *msgid, ...));
|
||||||
@ -4065,20 +4061,20 @@ extern tree maybe_get_template_decl_from_type_decl (tree);
|
|||||||
extern int processing_template_parmlist;
|
extern int processing_template_parmlist;
|
||||||
|
|
||||||
/* in repo.c */
|
/* in repo.c */
|
||||||
extern void repo_template_used PARAMS ((tree));
|
extern void repo_template_used (tree);
|
||||||
extern void repo_template_instantiated PARAMS ((tree, int));
|
extern void repo_template_instantiated (tree, bool);
|
||||||
extern void init_repo PARAMS ((const char *));
|
extern void init_repo (const char *);
|
||||||
extern void finish_repo PARAMS ((void));
|
extern void finish_repo (void);
|
||||||
|
|
||||||
/* in rtti.c */
|
/* in rtti.c */
|
||||||
extern void init_rtti_processing PARAMS((void));
|
extern void init_rtti_processing (void);
|
||||||
extern tree build_typeid PARAMS((tree));
|
extern tree build_typeid (tree);
|
||||||
extern tree get_tinfo_decl PARAMS((tree));
|
extern tree get_tinfo_decl (tree);
|
||||||
extern tree get_typeid PARAMS((tree));
|
extern tree get_typeid (tree);
|
||||||
extern tree build_dynamic_cast PARAMS((tree, tree));
|
extern tree build_dynamic_cast (tree, tree);
|
||||||
extern void emit_support_tinfos PARAMS((void));
|
extern void emit_support_tinfos (void);
|
||||||
extern int unemitted_tinfo_decl_p PARAMS((tree, void *));
|
extern bool unemitted_tinfo_decl_p (tree, void *);
|
||||||
extern int emit_tinfo_decl PARAMS((tree *, void *));
|
extern bool emit_tinfo_decl (tree *, void *);
|
||||||
|
|
||||||
/* in search.c */
|
/* in search.c */
|
||||||
extern tree lookup_base PARAMS ((tree, tree, base_access, base_kind *));
|
extern tree lookup_base PARAMS ((tree, tree, base_access, base_kind *));
|
||||||
|
@ -33,14 +33,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||||||
static const char *program_name;
|
static const char *program_name;
|
||||||
static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE;
|
static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE;
|
||||||
|
|
||||||
static void demangle_it PARAMS ((char *));
|
static void demangle_it (char *);
|
||||||
static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN;
|
static void usage (FILE *, int) ATTRIBUTE_NORETURN;
|
||||||
static void fatal PARAMS ((const char *)) ATTRIBUTE_NORETURN;
|
static void fatal (const char *) ATTRIBUTE_NORETURN;
|
||||||
static void print_demangler_list PARAMS ((FILE *));
|
static void print_demangler_list (FILE *);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
demangle_it (mangled_name)
|
demangle_it (char *mangled_name)
|
||||||
char *mangled_name;
|
|
||||||
{
|
{
|
||||||
char *result;
|
char *result;
|
||||||
|
|
||||||
@ -58,8 +57,7 @@ demangle_it (mangled_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_demangler_list (stream)
|
print_demangler_list (FILE *stream)
|
||||||
FILE *stream;
|
|
||||||
{
|
{
|
||||||
const struct demangler_engine *demangler;
|
const struct demangler_engine *demangler;
|
||||||
|
|
||||||
@ -74,9 +72,7 @@ print_demangler_list (stream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage (stream, status)
|
usage (FILE *stream, int status)
|
||||||
FILE *stream;
|
|
||||||
int status;
|
|
||||||
{
|
{
|
||||||
fprintf (stream, "\
|
fprintf (stream, "\
|
||||||
Usage: %s [-_] [-n] [--strip-underscores] [--no-strip-underscores] \n",
|
Usage: %s [-_] [-n] [--strip-underscores] [--no-strip-underscores] \n",
|
||||||
@ -100,7 +96,7 @@ Usage: %s [-_] [-n] [--strip-underscores] [--no-strip-underscores] \n",
|
|||||||
#define MBUF_SIZE 32767
|
#define MBUF_SIZE 32767
|
||||||
char mbuffer[MBUF_SIZE];
|
char mbuffer[MBUF_SIZE];
|
||||||
|
|
||||||
int strip_underscore = 0;
|
bool strip_underscore = false;
|
||||||
|
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{"strip-underscores", no_argument, 0, '_'},
|
{"strip-underscores", no_argument, 0, '_'},
|
||||||
@ -111,18 +107,16 @@ static const struct option long_options[] = {
|
|||||||
{0, no_argument, 0, 0}
|
{0, no_argument, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *
|
static const char *standard_symbol_characters (void);
|
||||||
standard_symbol_characters PARAMS ((void));
|
|
||||||
|
|
||||||
static const char *
|
static const char *hp_symbol_characters (void);
|
||||||
hp_symbol_characters PARAMS ((void));
|
|
||||||
|
|
||||||
/* Return the string of non-alnum characters that may occur
|
/* Return the string of non-alnum characters that may occur
|
||||||
as a valid symbol component, in the standard assembler symbol
|
as a valid symbol component, in the standard assembler symbol
|
||||||
syntax. */
|
syntax. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
standard_symbol_characters ()
|
standard_symbol_characters (void)
|
||||||
{
|
{
|
||||||
return "_$.";
|
return "_$.";
|
||||||
}
|
}
|
||||||
@ -159,17 +153,15 @@ standard_symbol_characters ()
|
|||||||
|
|
||||||
So have fun. */
|
So have fun. */
|
||||||
static const char *
|
static const char *
|
||||||
hp_symbol_characters ()
|
hp_symbol_characters (void)
|
||||||
{
|
{
|
||||||
return "_$.<>#,*&[]:(){}";
|
return "_$.<>#,*&[]:(){}";
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int main PARAMS ((int, char **));
|
extern int main (int, char **);
|
||||||
|
|
||||||
int
|
int
|
||||||
main (argc, argv)
|
main (int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
{
|
||||||
char *result;
|
char *result;
|
||||||
int c;
|
int c;
|
||||||
@ -190,14 +182,14 @@ main (argc, argv)
|
|||||||
case 'h':
|
case 'h':
|
||||||
usage (stdout, 0);
|
usage (stdout, 0);
|
||||||
case 'n':
|
case 'n':
|
||||||
strip_underscore = 0;
|
strip_underscore = false;
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
printf ("GNU %s (C++ demangler), version %s\n",
|
printf ("GNU %s (C++ demangler), version %s\n",
|
||||||
program_name, version_string);
|
program_name, version_string);
|
||||||
return (0);
|
return (0);
|
||||||
case '_':
|
case '_':
|
||||||
strip_underscore = 1;
|
strip_underscore = true;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
{
|
{
|
||||||
@ -296,8 +288,7 @@ main (argc, argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fatal (str)
|
fatal (const char *str)
|
||||||
const char *str;
|
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: %s\n", program_name, str);
|
fprintf (stderr, "%s: %s\n", program_name, str);
|
||||||
exit (1);
|
exit (1);
|
||||||
|
@ -1805,11 +1805,8 @@ walk_vtables_r (namespace, data)
|
|||||||
/* Walk the vtable declarations. Whenever one is found for which P
|
/* Walk the vtable declarations. Whenever one is found for which P
|
||||||
returns nonzero, call F with its address. If any call to F
|
returns nonzero, call F with its address. If any call to F
|
||||||
returns a nonzero value, return a nonzero value. */
|
returns a nonzero value, return a nonzero value. */
|
||||||
int
|
bool
|
||||||
walk_vtables (p, f, data)
|
walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
|
||||||
walk_globals_pred p;
|
|
||||||
walk_globals_fn f;
|
|
||||||
void *data;
|
|
||||||
{
|
{
|
||||||
struct walk_globals_data wgd;
|
struct walk_globals_data wgd;
|
||||||
wgd.p = p;
|
wgd.p = p;
|
||||||
@ -1885,14 +1882,11 @@ walk_globals_r (namespace, data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Walk the global declarations. Whenever one is found for which P
|
/* Walk the global declarations. Whenever one is found for which P
|
||||||
returns nonzero, call F with its address. If any call to F
|
returns true, call F with its address. If any call to F
|
||||||
returns a nonzero value, return a nonzero value. */
|
returns true, return true. */
|
||||||
|
|
||||||
int
|
bool
|
||||||
walk_globals (p, f, data)
|
walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
|
||||||
walk_globals_pred p;
|
|
||||||
walk_globals_fn f;
|
|
||||||
void *data;
|
|
||||||
{
|
{
|
||||||
struct walk_globals_data wgd;
|
struct walk_globals_data wgd;
|
||||||
wgd.p = p;
|
wgd.p = p;
|
||||||
|
560
gcc/cp/decl2.c
560
gcc/cp/decl2.c
File diff suppressed because it is too large
Load Diff
@ -11755,7 +11755,7 @@ cp_parser_class_head (parser,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int new_type_p;
|
bool new_type_p;
|
||||||
tree class_type;
|
tree class_type;
|
||||||
|
|
||||||
/* Given:
|
/* Given:
|
||||||
@ -11779,7 +11779,7 @@ cp_parser_class_head (parser,
|
|||||||
nested_name_specifier,
|
nested_name_specifier,
|
||||||
type,
|
type,
|
||||||
attributes,
|
attributes,
|
||||||
/*defn_p=*/1,
|
/*defn_p=*/true,
|
||||||
&new_type_p));
|
&new_type_p));
|
||||||
if (type != error_mark_node)
|
if (type != error_mark_node)
|
||||||
{
|
{
|
||||||
|
@ -29,10 +29,7 @@ Boston, MA 02111-1307, USA. */
|
|||||||
#include "cp-tree.h"
|
#include "cp-tree.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
cxx_print_decl (file, node, indent)
|
cxx_print_decl (FILE *file, tree node, int indent)
|
||||||
FILE *file;
|
|
||||||
tree node;
|
|
||||||
int indent;
|
|
||||||
{
|
{
|
||||||
if (TREE_CODE (node) == FIELD_DECL)
|
if (TREE_CODE (node) == FIELD_DECL)
|
||||||
{
|
{
|
||||||
@ -68,10 +65,7 @@ cxx_print_decl (file, node, indent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cxx_print_type (file, node, indent)
|
cxx_print_type (FILE *file, tree node, int indent)
|
||||||
FILE *file;
|
|
||||||
register tree node;
|
|
||||||
int indent;
|
|
||||||
{
|
{
|
||||||
switch (TREE_CODE (node))
|
switch (TREE_CODE (node))
|
||||||
{
|
{
|
||||||
@ -160,10 +154,7 @@ cxx_print_type (file, node, indent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cxx_print_identifier (file, node, indent)
|
cxx_print_identifier (FILE *file, tree node, int indent)
|
||||||
FILE *file;
|
|
||||||
tree node;
|
|
||||||
int indent;
|
|
||||||
{
|
{
|
||||||
print_node (file, "bindings", IDENTIFIER_NAMESPACE_BINDINGS (node), indent + 4);
|
print_node (file, "bindings", IDENTIFIER_NAMESPACE_BINDINGS (node), indent + 4);
|
||||||
print_node (file, "class", IDENTIFIER_CLASS_VALUE (node), indent + 4);
|
print_node (file, "class", IDENTIFIER_CLASS_VALUE (node), indent + 4);
|
||||||
@ -175,10 +166,7 @@ cxx_print_identifier (file, node, indent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cxx_print_xnode (file, node, indent)
|
cxx_print_xnode (FILE *file, tree node, int indent)
|
||||||
FILE *file;
|
|
||||||
tree node;
|
|
||||||
int indent;
|
|
||||||
{
|
{
|
||||||
switch (TREE_CODE (node))
|
switch (TREE_CODE (node))
|
||||||
{
|
{
|
||||||
|
@ -37,12 +37,12 @@ Boston, MA 02111-1307, USA. */
|
|||||||
#include "ggc.h"
|
#include "ggc.h"
|
||||||
#include "diagnostic.h"
|
#include "diagnostic.h"
|
||||||
|
|
||||||
static tree repo_get_id PARAMS ((tree));
|
static tree repo_get_id (tree);
|
||||||
static char *extract_string PARAMS ((char **));
|
static char *extract_string (char **);
|
||||||
static const char *get_base_filename PARAMS ((const char *));
|
static const char *get_base_filename (const char *);
|
||||||
static void open_repo_file PARAMS ((const char *));
|
static void open_repo_file (const char *);
|
||||||
static char *afgets PARAMS ((FILE *));
|
static char *afgets (FILE *);
|
||||||
static void reopen_repo_file_for_write PARAMS ((void));
|
static void reopen_repo_file_for_write (void);
|
||||||
|
|
||||||
static GTY(()) tree pending_repo;
|
static GTY(()) tree pending_repo;
|
||||||
static GTY(()) tree original_repo;
|
static GTY(()) tree original_repo;
|
||||||
@ -60,9 +60,7 @@ static struct obstack temporary_obstack;
|
|||||||
/* Record the flags used to compile this translation unit. */
|
/* Record the flags used to compile this translation unit. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_compile_flags (argc, argv)
|
repo_compile_flags (int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,30 +69,26 @@ repo_compile_flags (argc, argv)
|
|||||||
definition at link time. */
|
definition at link time. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_template_declared (t)
|
repo_template_declared (tree t)
|
||||||
tree t;
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/* Note where the definition of a template lives so that instantiations can
|
/* Note where the definition of a template lives so that instantiations can
|
||||||
be generated later. */
|
be generated later. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_template_defined (t)
|
repo_template_defined (tree t)
|
||||||
tree t;
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/* Note where the definition of a class lives to that template
|
/* Note where the definition of a class lives to that template
|
||||||
instantiations can use it. */
|
instantiations can use it. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_class_defined (t)
|
repo_class_defined (tree t)
|
||||||
tree t;
|
|
||||||
{}
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
repo_get_id (t)
|
repo_get_id (tree t)
|
||||||
tree t;
|
|
||||||
{
|
{
|
||||||
if (TYPE_P (t))
|
if (TYPE_P (t))
|
||||||
{
|
{
|
||||||
@ -119,8 +113,7 @@ repo_get_id (t)
|
|||||||
to emit it. */
|
to emit it. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_template_used (t)
|
repo_template_used (tree t)
|
||||||
tree t;
|
|
||||||
{
|
{
|
||||||
tree id;
|
tree id;
|
||||||
|
|
||||||
@ -161,8 +154,7 @@ repo_template_used (t)
|
|||||||
/* Note that the vtable for a class has been used, and offer to emit it. */
|
/* Note that the vtable for a class has been used, and offer to emit it. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
repo_vtable_used (t)
|
repo_vtable_used (tree t)
|
||||||
tree t;
|
|
||||||
{
|
{
|
||||||
if (! flag_use_repository)
|
if (! flag_use_repository)
|
||||||
return;
|
return;
|
||||||
@ -174,8 +166,7 @@ repo_vtable_used (t)
|
|||||||
emit it. */
|
emit it. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_inline_used (fn)
|
repo_inline_used (tree fn)
|
||||||
tree fn;
|
|
||||||
{
|
{
|
||||||
if (! flag_use_repository)
|
if (! flag_use_repository)
|
||||||
return;
|
return;
|
||||||
@ -195,16 +186,13 @@ repo_inline_used (fn)
|
|||||||
emit it. */
|
emit it. */
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_tinfo_used (ti)
|
repo_tinfo_used (tree ti)
|
||||||
tree ti;
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
repo_template_instantiated (t, extern_p)
|
repo_template_instantiated (tree t, bool extern_p)
|
||||||
tree t;
|
|
||||||
int extern_p;
|
|
||||||
{
|
{
|
||||||
if (! extern_p)
|
if (! extern_p)
|
||||||
{
|
{
|
||||||
@ -217,8 +205,7 @@ repo_template_instantiated (t, extern_p)
|
|||||||
/* Parse a reasonable subset of shell quoting syntax. */
|
/* Parse a reasonable subset of shell quoting syntax. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
extract_string (pp)
|
extract_string (char **pp)
|
||||||
char **pp;
|
|
||||||
{
|
{
|
||||||
char *p = *pp;
|
char *p = *pp;
|
||||||
int backquote = 0;
|
int backquote = 0;
|
||||||
@ -248,8 +235,7 @@ extract_string (pp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
get_base_filename (filename)
|
get_base_filename (const char *filename)
|
||||||
const char *filename;
|
|
||||||
{
|
{
|
||||||
char *p = getenv ("COLLECT_GCC_OPTIONS");
|
char *p = getenv ("COLLECT_GCC_OPTIONS");
|
||||||
char *output = NULL;
|
char *output = NULL;
|
||||||
@ -279,8 +265,7 @@ get_base_filename (filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
open_repo_file (filename)
|
open_repo_file (const char *filename)
|
||||||
const char *filename;
|
|
||||||
{
|
{
|
||||||
register const char *p;
|
register const char *p;
|
||||||
const char *s = get_base_filename (filename);
|
const char *s = get_base_filename (filename);
|
||||||
@ -301,8 +286,7 @@ open_repo_file (filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
afgets (stream)
|
afgets (FILE *stream)
|
||||||
FILE *stream;
|
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
while ((c = getc (stream)) != EOF && c != '\n')
|
while ((c = getc (stream)) != EOF && c != '\n')
|
||||||
@ -314,8 +298,7 @@ afgets (stream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
init_repo (filename)
|
init_repo (const char *filename)
|
||||||
const char *filename;
|
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
@ -367,7 +350,7 @@ init_repo (filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reopen_repo_file_for_write ()
|
reopen_repo_file_for_write (void)
|
||||||
{
|
{
|
||||||
if (repo_file)
|
if (repo_file)
|
||||||
fclose (repo_file);
|
fclose (repo_file);
|
||||||
@ -383,13 +366,13 @@ reopen_repo_file_for_write ()
|
|||||||
/* Emit any pending repos. */
|
/* Emit any pending repos. */
|
||||||
|
|
||||||
void
|
void
|
||||||
finish_repo ()
|
finish_repo (void)
|
||||||
{
|
{
|
||||||
tree t;
|
tree t;
|
||||||
int repo_changed = 0;
|
bool repo_changed = false;
|
||||||
char *dir, *args;
|
char *dir, *args;
|
||||||
|
|
||||||
if (! flag_use_repository)
|
if (!flag_use_repository)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Do we have to write out a new info file? */
|
/* Do we have to write out a new info file? */
|
||||||
@ -399,10 +382,10 @@ finish_repo ()
|
|||||||
|
|
||||||
for (t = original_repo; t; t = TREE_CHAIN (t))
|
for (t = original_repo; t; t = TREE_CHAIN (t))
|
||||||
{
|
{
|
||||||
if (! IDENTIFIER_REPO_USED (TREE_VALUE (t))
|
if (!IDENTIFIER_REPO_USED (TREE_VALUE (t))
|
||||||
|| (! TREE_PURPOSE (t) && IDENTIFIER_REPO_CHOSEN (TREE_VALUE (t))))
|
|| (!TREE_PURPOSE (t) && IDENTIFIER_REPO_CHOSEN (TREE_VALUE (t))))
|
||||||
{
|
{
|
||||||
repo_changed = 1;
|
repo_changed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
IDENTIFIER_REPO_USED (TREE_VALUE (t)) = 0;
|
IDENTIFIER_REPO_USED (TREE_VALUE (t)) = 0;
|
||||||
@ -410,12 +393,12 @@ finish_repo ()
|
|||||||
|
|
||||||
/* Are there any templates that are newly used? */
|
/* Are there any templates that are newly used? */
|
||||||
|
|
||||||
if (! repo_changed)
|
if (!repo_changed)
|
||||||
for (t = pending_repo; t; t = TREE_CHAIN (t))
|
for (t = pending_repo; t; t = TREE_CHAIN (t))
|
||||||
{
|
{
|
||||||
if (IDENTIFIER_REPO_USED (TREE_VALUE (t)))
|
if (IDENTIFIER_REPO_USED (TREE_VALUE (t)))
|
||||||
{
|
{
|
||||||
repo_changed = 1;
|
repo_changed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -423,14 +406,14 @@ finish_repo ()
|
|||||||
dir = getpwd ();
|
dir = getpwd ();
|
||||||
args = getenv ("COLLECT_GCC_OPTIONS");
|
args = getenv ("COLLECT_GCC_OPTIONS");
|
||||||
|
|
||||||
if (! repo_changed && pending_repo)
|
if (!repo_changed && pending_repo)
|
||||||
if (strcmp (old_main, main_input_filename) != 0
|
if (strcmp (old_main, main_input_filename) != 0
|
||||||
|| strcmp (old_dir, dir) != 0
|
|| strcmp (old_dir, dir) != 0
|
||||||
|| (args == NULL) != (old_args == NULL)
|
|| (args == NULL) != (old_args == NULL)
|
||||||
|| (args && strcmp (old_args, args) != 0))
|
|| (args && strcmp (old_args, args) != 0))
|
||||||
repo_changed = 1;
|
repo_changed = true;
|
||||||
|
|
||||||
if (! repo_changed || errorcount || sorrycount)
|
if (!repo_changed || errorcount || sorrycount)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
reopen_repo_file_for_write ();
|
reopen_repo_file_for_write ();
|
||||||
|
163
gcc/cp/rtti.c
163
gcc/cp/rtti.c
@ -83,20 +83,20 @@ static tree get_tinfo_decl_dynamic PARAMS((tree));
|
|||||||
static tree get_tinfo_ptr PARAMS((tree));
|
static tree get_tinfo_ptr PARAMS((tree));
|
||||||
static bool typeid_ok_p PARAMS((void));
|
static bool typeid_ok_p PARAMS((void));
|
||||||
static int qualifier_flags PARAMS((tree));
|
static int qualifier_flags PARAMS((tree));
|
||||||
static int target_incomplete_p PARAMS((tree));
|
static bool target_incomplete_p (tree);
|
||||||
static tree tinfo_base_init PARAMS((tree, tree));
|
static tree tinfo_base_init PARAMS((tree, tree));
|
||||||
static tree generic_initializer PARAMS((tree, tree));
|
static tree generic_initializer PARAMS((tree, tree));
|
||||||
static tree ptr_initializer PARAMS((tree, tree, int *));
|
static tree ptr_initializer (tree, tree, bool *);
|
||||||
static tree ptm_initializer PARAMS((tree, tree, int *));
|
static tree ptm_initializer (tree, tree, bool *);
|
||||||
static tree dfs_class_hint_mark PARAMS ((tree, void *));
|
static tree dfs_class_hint_mark PARAMS ((tree, void *));
|
||||||
static tree dfs_class_hint_unmark PARAMS ((tree, void *));
|
static tree dfs_class_hint_unmark PARAMS ((tree, void *));
|
||||||
static int class_hint_flags PARAMS((tree));
|
static int class_hint_flags PARAMS((tree));
|
||||||
static tree class_initializer PARAMS((tree, tree, tree));
|
static tree class_initializer PARAMS((tree, tree, tree));
|
||||||
static tree create_pseudo_type_info PARAMS((const char *, int, ...));
|
static tree create_pseudo_type_info PARAMS((const char *, int, ...));
|
||||||
static tree get_pseudo_ti_init PARAMS ((tree, tree, int *));
|
static tree get_pseudo_ti_init PARAMS ((tree, tree, bool *));
|
||||||
static tree get_pseudo_ti_desc PARAMS((tree));
|
static tree get_pseudo_ti_desc PARAMS((tree));
|
||||||
static void create_tinfo_types PARAMS((void));
|
static void create_tinfo_types PARAMS((void));
|
||||||
static int typeinfo_in_lib_p PARAMS((tree));
|
static bool typeinfo_in_lib_p (tree);
|
||||||
|
|
||||||
static int doing_runtime = 0;
|
static int doing_runtime = 0;
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ static int doing_runtime = 0;
|
|||||||
the internal versions of the ABI types. */
|
the internal versions of the ABI types. */
|
||||||
|
|
||||||
void
|
void
|
||||||
init_rtti_processing ()
|
init_rtti_processing (void)
|
||||||
{
|
{
|
||||||
tree const_type_info_type;
|
tree const_type_info_type;
|
||||||
|
|
||||||
@ -131,8 +131,7 @@ init_rtti_processing ()
|
|||||||
expression. */
|
expression. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
build_headof (exp)
|
build_headof (tree exp)
|
||||||
tree exp;
|
|
||||||
{
|
{
|
||||||
tree type = TREE_TYPE (exp);
|
tree type = TREE_TYPE (exp);
|
||||||
tree offset;
|
tree offset;
|
||||||
@ -163,7 +162,7 @@ build_headof (exp)
|
|||||||
See libstdc++/exception.cc for __throw_bad_cast */
|
See libstdc++/exception.cc for __throw_bad_cast */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
throw_bad_cast ()
|
throw_bad_cast (void)
|
||||||
{
|
{
|
||||||
tree fn = get_identifier ("__cxa_bad_cast");
|
tree fn = get_identifier ("__cxa_bad_cast");
|
||||||
if (IDENTIFIER_GLOBAL_VALUE (fn))
|
if (IDENTIFIER_GLOBAL_VALUE (fn))
|
||||||
@ -176,7 +175,7 @@ throw_bad_cast ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
throw_bad_typeid ()
|
throw_bad_typeid (void)
|
||||||
{
|
{
|
||||||
tree fn = get_identifier ("__cxa_bad_typeid");
|
tree fn = get_identifier ("__cxa_bad_typeid");
|
||||||
if (IDENTIFIER_GLOBAL_VALUE (fn))
|
if (IDENTIFIER_GLOBAL_VALUE (fn))
|
||||||
@ -196,8 +195,7 @@ throw_bad_typeid ()
|
|||||||
otherwise return the static type of the expression. */
|
otherwise return the static type of the expression. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
get_tinfo_decl_dynamic (exp)
|
get_tinfo_decl_dynamic (tree exp)
|
||||||
tree exp;
|
|
||||||
{
|
{
|
||||||
tree type;
|
tree type;
|
||||||
|
|
||||||
@ -238,7 +236,7 @@ get_tinfo_decl_dynamic (exp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
typeid_ok_p ()
|
typeid_ok_p (void)
|
||||||
{
|
{
|
||||||
if (! flag_rtti)
|
if (! flag_rtti)
|
||||||
{
|
{
|
||||||
@ -256,8 +254,7 @@ typeid_ok_p ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
tree
|
tree
|
||||||
build_typeid (exp)
|
build_typeid (tree exp)
|
||||||
tree exp;
|
|
||||||
{
|
{
|
||||||
tree cond = NULL_TREE;
|
tree cond = NULL_TREE;
|
||||||
int nonnull = 0;
|
int nonnull = 0;
|
||||||
@ -297,8 +294,7 @@ build_typeid (exp)
|
|||||||
|
|
||||||
/* Generate the NTBS name of a type. */
|
/* Generate the NTBS name of a type. */
|
||||||
static tree
|
static tree
|
||||||
tinfo_name (type)
|
tinfo_name (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
tree name_string;
|
tree name_string;
|
||||||
@ -313,8 +309,7 @@ tinfo_name (type)
|
|||||||
it --- decls in vtables are only used if the vtable is output. */
|
it --- decls in vtables are only used if the vtable is output. */
|
||||||
|
|
||||||
tree
|
tree
|
||||||
get_tinfo_decl (type)
|
get_tinfo_decl (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
tree name;
|
tree name;
|
||||||
tree d;
|
tree d;
|
||||||
@ -375,8 +370,7 @@ get_tinfo_decl (type)
|
|||||||
cast to the language defined type. */
|
cast to the language defined type. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
get_tinfo_ptr (type)
|
get_tinfo_ptr (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
tree exp = get_tinfo_decl (type);
|
tree exp = get_tinfo_decl (type);
|
||||||
|
|
||||||
@ -390,8 +384,7 @@ get_tinfo_ptr (type)
|
|||||||
/* Return the type_info object for TYPE. */
|
/* Return the type_info object for TYPE. */
|
||||||
|
|
||||||
tree
|
tree
|
||||||
get_typeid (type)
|
get_typeid (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
if (type == error_mark_node || !typeid_ok_p ())
|
if (type == error_mark_node || !typeid_ok_p ())
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
@ -422,8 +415,7 @@ get_typeid (type)
|
|||||||
RESULT, it must have previously had a save_expr applied to it. */
|
RESULT, it must have previously had a save_expr applied to it. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
ifnonnull (test, result)
|
ifnonnull (tree test, tree result)
|
||||||
tree test, result;
|
|
||||||
{
|
{
|
||||||
return build (COND_EXPR, TREE_TYPE (result),
|
return build (COND_EXPR, TREE_TYPE (result),
|
||||||
build (EQ_EXPR, boolean_type_node, test, integer_zero_node),
|
build (EQ_EXPR, boolean_type_node, test, integer_zero_node),
|
||||||
@ -435,8 +427,7 @@ ifnonnull (test, result)
|
|||||||
paper. */
|
paper. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
build_dynamic_cast_1 (type, expr)
|
build_dynamic_cast_1 (tree type, tree expr)
|
||||||
tree type, expr;
|
|
||||||
{
|
{
|
||||||
enum tree_code tc = TREE_CODE (type);
|
enum tree_code tc = TREE_CODE (type);
|
||||||
tree exprtype = TREE_TYPE (expr);
|
tree exprtype = TREE_TYPE (expr);
|
||||||
@ -683,8 +674,7 @@ build_dynamic_cast_1 (type, expr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tree
|
tree
|
||||||
build_dynamic_cast (type, expr)
|
build_dynamic_cast (tree type, tree expr)
|
||||||
tree type, expr;
|
|
||||||
{
|
{
|
||||||
if (type == error_mark_node || expr == error_mark_node)
|
if (type == error_mark_node || expr == error_mark_node)
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
@ -698,8 +688,7 @@ build_dynamic_cast (type, expr)
|
|||||||
/* Return the runtime bit mask encoding the qualifiers of TYPE. */
|
/* Return the runtime bit mask encoding the qualifiers of TYPE. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qualifier_flags (type)
|
qualifier_flags (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
int quals = cp_type_quals (type);
|
int quals = cp_type_quals (type);
|
||||||
@ -713,26 +702,25 @@ qualifier_flags (type)
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return nonzero, if the pointer chain TYPE ends at an incomplete type, or
|
/* Return true, if the pointer chain TYPE ends at an incomplete type, or
|
||||||
contains a pointer to member of an incomplete class. */
|
contains a pointer to member of an incomplete class. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
target_incomplete_p (type)
|
target_incomplete_p (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
while (TREE_CODE (type) == POINTER_TYPE)
|
while (TREE_CODE (type) == POINTER_TYPE)
|
||||||
if (TYPE_PTRMEM_P (type))
|
if (TYPE_PTRMEM_P (type))
|
||||||
{
|
{
|
||||||
if (!COMPLETE_TYPE_P (TYPE_PTRMEM_CLASS_TYPE (type)))
|
if (!COMPLETE_TYPE_P (TYPE_PTRMEM_CLASS_TYPE (type)))
|
||||||
return 1;
|
return true;
|
||||||
type = TYPE_PTRMEM_POINTED_TO_TYPE (type);
|
type = TYPE_PTRMEM_POINTED_TO_TYPE (type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
type = TREE_TYPE (type);
|
type = TREE_TYPE (type);
|
||||||
if (!COMPLETE_OR_VOID_TYPE_P (type))
|
if (!COMPLETE_OR_VOID_TYPE_P (type))
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a CONSTRUCTOR for the common part of the type_info objects. This
|
/* Return a CONSTRUCTOR for the common part of the type_info objects. This
|
||||||
@ -742,9 +730,7 @@ target_incomplete_p (type)
|
|||||||
as comdat, because of pointers to incomplete.) */
|
as comdat, because of pointers to incomplete.) */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
tinfo_base_init (desc, target)
|
tinfo_base_init (tree desc, tree target)
|
||||||
tree desc;
|
|
||||||
tree target;
|
|
||||||
{
|
{
|
||||||
tree init = NULL_TREE;
|
tree init = NULL_TREE;
|
||||||
tree name_decl;
|
tree name_decl;
|
||||||
@ -826,9 +812,7 @@ tinfo_base_init (desc, target)
|
|||||||
additional fields to the type_info base. */
|
additional fields to the type_info base. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
generic_initializer (desc, target)
|
generic_initializer (tree desc, tree target)
|
||||||
tree desc;
|
|
||||||
tree target;
|
|
||||||
{
|
{
|
||||||
tree init = tinfo_base_init (desc, target);
|
tree init = tinfo_base_init (desc, target);
|
||||||
|
|
||||||
@ -842,20 +826,17 @@ generic_initializer (desc, target)
|
|||||||
which adds target type and qualifier flags members to the type_info base. */
|
which adds target type and qualifier flags members to the type_info base. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
ptr_initializer (desc, target, non_public_ptr)
|
ptr_initializer (tree desc, tree target, bool *non_public_ptr)
|
||||||
tree desc;
|
|
||||||
tree target;
|
|
||||||
int *non_public_ptr;
|
|
||||||
{
|
{
|
||||||
tree init = tinfo_base_init (desc, target);
|
tree init = tinfo_base_init (desc, target);
|
||||||
tree to = TREE_TYPE (target);
|
tree to = TREE_TYPE (target);
|
||||||
int flags = qualifier_flags (to);
|
int flags = qualifier_flags (to);
|
||||||
int incomplete = target_incomplete_p (to);
|
bool incomplete = target_incomplete_p (to);
|
||||||
|
|
||||||
if (incomplete)
|
if (incomplete)
|
||||||
{
|
{
|
||||||
flags |= 8;
|
flags |= 8;
|
||||||
*non_public_ptr = 1;
|
*non_public_ptr = true;
|
||||||
}
|
}
|
||||||
init = tree_cons (NULL_TREE, build_int_2 (flags, 0), init);
|
init = tree_cons (NULL_TREE, build_int_2 (flags, 0), init);
|
||||||
init = tree_cons (NULL_TREE,
|
init = tree_cons (NULL_TREE,
|
||||||
@ -873,26 +854,23 @@ ptr_initializer (desc, target, non_public_ptr)
|
|||||||
base. */
|
base. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
ptm_initializer (desc, target, non_public_ptr)
|
ptm_initializer (tree desc, tree target, bool *non_public_ptr)
|
||||||
tree desc;
|
|
||||||
tree target;
|
|
||||||
int *non_public_ptr;
|
|
||||||
{
|
{
|
||||||
tree init = tinfo_base_init (desc, target);
|
tree init = tinfo_base_init (desc, target);
|
||||||
tree to = TYPE_PTRMEM_POINTED_TO_TYPE (target);
|
tree to = TYPE_PTRMEM_POINTED_TO_TYPE (target);
|
||||||
tree klass = TYPE_PTRMEM_CLASS_TYPE (target);
|
tree klass = TYPE_PTRMEM_CLASS_TYPE (target);
|
||||||
int flags = qualifier_flags (to);
|
int flags = qualifier_flags (to);
|
||||||
int incomplete = target_incomplete_p (to);
|
bool incomplete = target_incomplete_p (to);
|
||||||
|
|
||||||
if (incomplete)
|
if (incomplete)
|
||||||
{
|
{
|
||||||
flags |= 0x8;
|
flags |= 0x8;
|
||||||
*non_public_ptr = 1;
|
*non_public_ptr = true;
|
||||||
}
|
}
|
||||||
if (!COMPLETE_TYPE_P (klass))
|
if (!COMPLETE_TYPE_P (klass))
|
||||||
{
|
{
|
||||||
flags |= 0x10;
|
flags |= 0x10;
|
||||||
*non_public_ptr = 1;
|
*non_public_ptr = true;
|
||||||
}
|
}
|
||||||
init = tree_cons (NULL_TREE, build_int_2 (flags, 0), init);
|
init = tree_cons (NULL_TREE, build_int_2 (flags, 0), init);
|
||||||
init = tree_cons (NULL_TREE,
|
init = tree_cons (NULL_TREE,
|
||||||
@ -913,9 +891,7 @@ ptm_initializer (desc, target, non_public_ptr)
|
|||||||
possible for a type to be both a virtual and non-virtual base. */
|
possible for a type to be both a virtual and non-virtual base. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
dfs_class_hint_mark (binfo, data)
|
dfs_class_hint_mark (tree binfo, void *data)
|
||||||
tree binfo;
|
|
||||||
void *data;
|
|
||||||
{
|
{
|
||||||
tree basetype = BINFO_TYPE (binfo);
|
tree basetype = BINFO_TYPE (binfo);
|
||||||
int *hint = (int *) data;
|
int *hint = (int *) data;
|
||||||
@ -942,9 +918,7 @@ dfs_class_hint_mark (binfo, data)
|
|||||||
/* Clear the base's dfs marks, after searching for duplicate bases. */
|
/* Clear the base's dfs marks, after searching for duplicate bases. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
dfs_class_hint_unmark (binfo, data)
|
dfs_class_hint_unmark (tree binfo, void *data ATTRIBUTE_UNUSED)
|
||||||
tree binfo;
|
|
||||||
void *data ATTRIBUTE_UNUSED;
|
|
||||||
{
|
{
|
||||||
tree basetype = BINFO_TYPE (binfo);
|
tree basetype = BINFO_TYPE (binfo);
|
||||||
|
|
||||||
@ -956,8 +930,7 @@ dfs_class_hint_unmark (binfo, data)
|
|||||||
/* Determine the hint flags describing the features of a class's hierarchy. */
|
/* Determine the hint flags describing the features of a class's hierarchy. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
class_hint_flags (type)
|
class_hint_flags (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
int hint_flags = 0;
|
int hint_flags = 0;
|
||||||
int i;
|
int i;
|
||||||
@ -980,10 +953,7 @@ class_hint_flags (type)
|
|||||||
which adds hint flags and TRAIL initializers to the type_info base. */
|
which adds hint flags and TRAIL initializers to the type_info base. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
class_initializer (desc, target, trail)
|
class_initializer (tree desc, tree target, tree trail)
|
||||||
tree desc;
|
|
||||||
tree target;
|
|
||||||
tree trail;
|
|
||||||
{
|
{
|
||||||
tree init = tinfo_base_init (desc, target);
|
tree init = tinfo_base_init (desc, target);
|
||||||
|
|
||||||
@ -993,12 +963,11 @@ class_initializer (desc, target, trail)
|
|||||||
return init;
|
return init;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns nonzero if the typeinfo for type should be placed in
|
/* Returns true if the typeinfo for type should be placed in
|
||||||
the runtime library. */
|
the runtime library. */
|
||||||
|
|
||||||
static int
|
static bool
|
||||||
typeinfo_in_lib_p (type)
|
typeinfo_in_lib_p (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
/* The typeinfo objects for `T*' and `const T*' are in the runtime
|
/* The typeinfo objects for `T*' and `const T*' are in the runtime
|
||||||
library for simple types T. */
|
library for simple types T. */
|
||||||
@ -1014,10 +983,10 @@ typeinfo_in_lib_p (type)
|
|||||||
case CHAR_TYPE:
|
case CHAR_TYPE:
|
||||||
case REAL_TYPE:
|
case REAL_TYPE:
|
||||||
case VOID_TYPE:
|
case VOID_TYPE:
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1028,10 +997,7 @@ typeinfo_in_lib_p (type)
|
|||||||
types will be completed. */
|
types will be completed. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
get_pseudo_ti_init (type, var_desc, non_public_p)
|
get_pseudo_ti_init (tree type, tree var_desc, bool *non_public_p)
|
||||||
tree type;
|
|
||||||
tree var_desc;
|
|
||||||
int *non_public_p;
|
|
||||||
{
|
{
|
||||||
my_friendly_assert (at_eof, 20021120);
|
my_friendly_assert (at_eof, 20021120);
|
||||||
switch (TREE_CODE (type))
|
switch (TREE_CODE (type))
|
||||||
@ -1059,7 +1025,7 @@ get_pseudo_ti_init (type, var_desc, non_public_p)
|
|||||||
{
|
{
|
||||||
if (!COMPLETE_TYPE_P (type))
|
if (!COMPLETE_TYPE_P (type))
|
||||||
/* Emit a non-public class_type_info. */
|
/* Emit a non-public class_type_info. */
|
||||||
*non_public_p = 1;
|
*non_public_p = true;
|
||||||
return class_initializer (var_desc, type, NULL_TREE);
|
return class_initializer (var_desc, type, NULL_TREE);
|
||||||
}
|
}
|
||||||
else if (var_desc == si_class_desc_type_node)
|
else if (var_desc == si_class_desc_type_node)
|
||||||
@ -1151,7 +1117,7 @@ get_pseudo_ti_init (type, var_desc, non_public_p)
|
|||||||
NULL. */
|
NULL. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
create_pseudo_type_info VPARAMS((const char *real_name, int ident, ...))
|
create_pseudo_type_info (const char *real_name, int ident, ...)
|
||||||
{
|
{
|
||||||
tree pseudo_type;
|
tree pseudo_type;
|
||||||
char *pseudo_name;
|
char *pseudo_name;
|
||||||
@ -1199,8 +1165,7 @@ create_pseudo_type_info VPARAMS((const char *real_name, int ident, ...))
|
|||||||
translation unit. */
|
translation unit. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
get_pseudo_ti_desc (type)
|
get_pseudo_ti_desc (tree type)
|
||||||
tree type;
|
|
||||||
{
|
{
|
||||||
switch (TREE_CODE (type))
|
switch (TREE_CODE (type))
|
||||||
{
|
{
|
||||||
@ -1283,7 +1248,7 @@ get_pseudo_ti_desc (type)
|
|||||||
varable definitions. */
|
varable definitions. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
create_tinfo_types ()
|
create_tinfo_types (void)
|
||||||
{
|
{
|
||||||
my_friendly_assert (!ti_desc_type_node, 20020609);
|
my_friendly_assert (!ti_desc_type_node, 20020609);
|
||||||
|
|
||||||
@ -1385,7 +1350,7 @@ create_tinfo_types ()
|
|||||||
destructor is defined, then the runtime is being built. */
|
destructor is defined, then the runtime is being built. */
|
||||||
|
|
||||||
void
|
void
|
||||||
emit_support_tinfos ()
|
emit_support_tinfos (void)
|
||||||
{
|
{
|
||||||
static tree *const fundamentals[] =
|
static tree *const fundamentals[] =
|
||||||
{
|
{
|
||||||
@ -1437,13 +1402,11 @@ emit_support_tinfos ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return nonzero, iff T is a type_info variable which has not had a
|
/* Return true, iff T is a type_info variable which has not had a
|
||||||
definition emitted for it. */
|
definition emitted for it. */
|
||||||
|
|
||||||
int
|
bool
|
||||||
unemitted_tinfo_decl_p (t, data)
|
unemitted_tinfo_decl_p (tree t, void *data ATTRIBUTE_UNUSED)
|
||||||
tree t;
|
|
||||||
void *data ATTRIBUTE_UNUSED;
|
|
||||||
{
|
{
|
||||||
if (/* It's a var decl */
|
if (/* It's a var decl */
|
||||||
TREE_CODE (t) == VAR_DECL
|
TREE_CODE (t) == VAR_DECL
|
||||||
@ -1459,33 +1422,31 @@ unemitted_tinfo_decl_p (t, data)
|
|||||||
&& TYPE_FIELDS (TREE_TYPE (t))
|
&& TYPE_FIELDS (TREE_TYPE (t))
|
||||||
/* which is our pseudo type info */
|
/* which is our pseudo type info */
|
||||||
&& TREE_TYPE (TYPE_FIELDS (TREE_TYPE (t))) == ti_desc_type_node)
|
&& TREE_TYPE (TYPE_FIELDS (TREE_TYPE (t))) == ti_desc_type_node)
|
||||||
return 1;
|
return true;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish a type info decl. DECL_PTR is a pointer to an unemitted
|
/* Finish a type info decl. DECL_PTR is a pointer to an unemitted
|
||||||
tinfo decl. Determine whether it needs emitting, and if so
|
tinfo decl. Determine whether it needs emitting, and if so
|
||||||
generate the initializer. */
|
generate the initializer. */
|
||||||
|
|
||||||
int
|
bool
|
||||||
emit_tinfo_decl (decl_ptr, data)
|
emit_tinfo_decl (tree *decl_ptr, void *data ATTRIBUTE_UNUSED)
|
||||||
tree *decl_ptr;
|
|
||||||
void *data ATTRIBUTE_UNUSED;
|
|
||||||
{
|
{
|
||||||
tree decl = *decl_ptr;
|
tree decl = *decl_ptr;
|
||||||
tree type = TREE_TYPE (DECL_NAME (decl));
|
tree type = TREE_TYPE (DECL_NAME (decl));
|
||||||
int non_public;
|
bool non_public;
|
||||||
int in_library = typeinfo_in_lib_p (type);
|
int in_library = typeinfo_in_lib_p (type);
|
||||||
tree var_desc, var_init;
|
tree var_desc, var_init;
|
||||||
|
|
||||||
import_export_tinfo (decl, type, in_library);
|
import_export_tinfo (decl, type, in_library);
|
||||||
if (DECL_REALLY_EXTERN (decl) || !DECL_NEEDED_P (decl))
|
if (DECL_REALLY_EXTERN (decl) || !DECL_NEEDED_P (decl))
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
if (!doing_runtime && in_library)
|
if (!doing_runtime && in_library)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
non_public = 0;
|
non_public = false;
|
||||||
var_desc = get_pseudo_ti_desc (type);
|
var_desc = get_pseudo_ti_desc (type);
|
||||||
var_init = get_pseudo_ti_init (type, var_desc, &non_public);
|
var_init = get_pseudo_ti_init (type, var_desc, &non_public);
|
||||||
|
|
||||||
@ -1501,5 +1462,5 @@ emit_tinfo_decl (decl_ptr, data)
|
|||||||
/* Say we've dealt with it. */
|
/* Say we've dealt with it. */
|
||||||
TREE_TYPE (DECL_NAME (decl)) = NULL_TREE;
|
TREE_TYPE (DECL_NAME (decl)) = NULL_TREE;
|
||||||
|
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user