From 3b27886e3f68a942f551a2689831ae6a5d1b172b Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Mon, 17 Dec 2001 22:43:55 +0000 Subject: [PATCH] Makefile.in: Update dependencies. * Makefile.in: Update dependencies. * c-lang.c: Remove unnecessary includes. (deferred_fns, start_cdtor, finish_cdtor, defer_fn): Move to c-objc-common.c. (finish_file): Move body to c_common_finish_file. * c-objc-common.c: Include varray.h and ggc.h. (deferred_fns, start_cdtor, finish_cdtor, defer_fn, expand_deferred_fns, c_objc_common_finish_file): Moved from c-lang.c. (c_objc_common_init): Initialize deferred function array. * c-tree.h (c_objc_common_finish_file, static_ctors, static_dtors): New. objc: * Make-lang.in: Update dependencies. * objc/objc-act.c: Don't include varray.h. (defer_fn, deferred_fns): Move to c-objc-common.c. (objc_init): Similarly for initialization of it. (finish_file): Move some to c-objc-common.c, use c_objc_common_finish_file. From-SVN: r48134 --- gcc/ChangeLog | 21 +++++++ gcc/Makefile.in | 6 +- gcc/c-lang.c | 129 +---------------------------------------- gcc/c-objc-common.c | 131 ++++++++++++++++++++++++++++++++++++++++++ gcc/c-tree.h | 7 ++- gcc/objc/Make-lang.in | 2 +- gcc/objc/objc-act.c | 28 +-------- 7 files changed, 164 insertions(+), 160 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7e0892f47a..0a943c52d0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2001-12-17 Neil Booth + + * Makefile.in: Update dependencies. + * c-lang.c: Remove unnecessary includes. + (deferred_fns, start_cdtor, finish_cdtor, defer_fn): Move to + c-objc-common.c. + (finish_file): Move body to c_common_finish_file. + * c-objc-common.c: Include varray.h and ggc.h. + (deferred_fns, start_cdtor, finish_cdtor, defer_fn, + expand_deferred_fns, c_objc_common_finish_file): Moved from c-lang.c. + (c_objc_common_init): Initialize deferred function array. + * c-tree.h (c_objc_common_finish_file, + static_ctors, static_dtors): New. +objc: + * Make-lang.in: Update dependencies. + * objc/objc-act.c: Don't include varray.h. + (defer_fn, deferred_fns): Move to c-objc-common.c. + (objc_init): Similarly for initialization of it. + (finish_file): Move some to c-objc-common.c, use + c_objc_common_finish_file. + 2001-12-17 Aldy Hernandez * config/rs6000/rs6000.c: Remove is_gpr_return_reg prototype. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 44c9e34d2f2..8f7cabf86f9 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1157,15 +1157,15 @@ c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \ c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H) c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ - $(GGC_H) toplev.h function.h $(VARRAY_H) \ - $(RTL_H) $(EXPR_H) langhooks.h langhooks-def.h + langhooks.h langhooks-def.h c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \ debug.h $(C_TREE_H) \ c-pragma.h input.h intl.h flags.h toplev.h output.h \ mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H) c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \ $(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \ - flags.h toplev.h tree-inline.h diagnostic.h integrate.h + flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \ + $(GGC_H) c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ flags.h toplev.h c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h diff --git a/gcc/c-lang.c b/gcc/c-lang.c index 6e4c158dcb4..497d32af122 100644 --- a/gcc/c-lang.c +++ b/gcc/c-lang.c @@ -23,14 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "config.h" #include "system.h" #include "tree.h" -#include "function.h" -#include "toplev.h" -#include "flags.h" -#include "ggc.h" -#include "rtl.h" -#include "expr.h" #include "c-tree.h" -#include "varray.h" #include "langhooks.h" #include "langhooks-def.h" @@ -78,8 +71,6 @@ static void c_post_options PARAMS ((void)); /* Each front end provides its own. */ const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; -static varray_type deferred_fns; - /* Post-switch processing. */ static void c_post_options () @@ -97,12 +88,7 @@ static const char * c_init (filename) const char *filename; { - filename = c_objc_common_init (filename); - - VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns"); - ggc_add_tree_varray_root (&deferred_fns, 1); - - return filename; + return c_objc_common_init (filename); } /* Used by c-lex.c, but only for objc. */ @@ -157,119 +143,8 @@ lookup_objc_ivar (id) return 0; } -extern tree static_ctors; -extern tree static_dtors; - -static tree start_cdtor PARAMS ((int)); -static void finish_cdtor PARAMS ((tree)); - -static tree -start_cdtor (method_type) - int method_type; -{ - tree fnname = get_file_function_name (method_type); - tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node); - tree body; - - start_function (void_list_node_1, - build_nt (CALL_EXPR, fnname, - tree_cons (NULL_TREE, NULL_TREE, void_list_node_1), - NULL_TREE), - NULL_TREE); - store_parm_decls (); - - current_function_cannot_inline - = "static constructors and destructors cannot be inlined"; - - body = c_begin_compound_stmt (); - - pushlevel (0); - clear_last_expr (); - add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - - return body; -} - -static void -finish_cdtor (body) - tree body; -{ - tree scope; - tree block; - - scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); - block = poplevel (0, 0, 0); - SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block; - SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block; - - RECHAIN_STMTS (body, COMPOUND_BODY (body)); - - finish_function (0); -} - -/* Register a function tree, so that its optimization and conversion - to RTL is only done at the end of the compilation. */ - -int -defer_fn (fn) - tree fn; -{ - VARRAY_PUSH_TREE (deferred_fns, fn); - - return 1; -} - -/* Called at end of parsing, but before end-of-file processing. */ - void finish_file () { - unsigned int i; - - for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) - { - tree decl = VARRAY_TREE (deferred_fns, i); - - if (! TREE_ASM_WRITTEN (decl)) - { - /* For static inline functions, delay the decision whether to - emit them or not until wrapup_global_declarations. */ - if (! TREE_PUBLIC (decl)) - DECL_DEFER_OUTPUT (decl) = 1; - c_expand_deferred_function (decl); - } - } - VARRAY_FREE (deferred_fns); - - if (static_ctors) - { - tree body = start_cdtor ('I'); - - for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors)) - c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors), - NULL_TREE)); - - finish_cdtor (body); - } - if (static_dtors) - { - tree body = start_cdtor ('D'); - - for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) - c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors), - NULL_TREE)); - - finish_cdtor (body); - } - - { - int flags; - FILE *stream = dump_begin (TDI_all, &flags); - - if (stream) - { - dump_node (getdecls (), flags & ~TDF_SLIM, stream); - dump_end (TDI_all, stream); - } - } + c_objc_common_finish_file (); } diff --git a/gcc/c-objc-common.c b/gcc/c-objc-common.c index be3b847facd..6554cf59de8 100644 --- a/gcc/c-objc-common.c +++ b/gcc/c-objc-common.c @@ -31,9 +31,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "toplev.h" #include "diagnostic.h" #include "tree-inline.h" +#include "varray.h" +#include "ggc.h" static int c_tree_printer PARAMS ((output_buffer *)); static tree inline_forbidden_p PARAMS ((tree *, int *, void *)); +static void expand_deferred_fns PARAMS ((void)); +static tree start_cdtor PARAMS ((int)); +static void finish_cdtor PARAMS ((tree)); + +static varray_type deferred_fns; int c_missing_noreturn_ok_p (decl) @@ -227,9 +234,133 @@ c_objc_common_init (filename) mesg_implicit_function_declaration = 0; } + VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns"); + ggc_add_tree_varray_root (&deferred_fns, 1); + return filename; } +/* Register a function tree, so that its optimization and conversion + to RTL is only done at the end of the compilation. */ + +int +defer_fn (fn) + tree fn; +{ + VARRAY_PUSH_TREE (deferred_fns, fn); + + return 1; +} + +/* Expand deferred functions for C and ObjC. */ + +static void +expand_deferred_fns () +{ + unsigned int i; + + for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) + { + tree decl = VARRAY_TREE (deferred_fns, i); + + if (! TREE_ASM_WRITTEN (decl)) + { + /* For static inline functions, delay the decision whether to + emit them or not until wrapup_global_declarations. */ + if (! TREE_PUBLIC (decl)) + DECL_DEFER_OUTPUT (decl) = 1; + c_expand_deferred_function (decl); + } + } + + VARRAY_FREE (deferred_fns); +} + +static tree +start_cdtor (method_type) + int method_type; +{ + tree fnname = get_file_function_name (method_type); + tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node); + tree body; + + start_function (void_list_node_1, + build_nt (CALL_EXPR, fnname, + tree_cons (NULL_TREE, NULL_TREE, void_list_node_1), + NULL_TREE), + NULL_TREE); + store_parm_decls (); + + current_function_cannot_inline + = "static constructors and destructors cannot be inlined"; + + body = c_begin_compound_stmt (); + + pushlevel (0); + clear_last_expr (); + add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); + + return body; +} + +static void +finish_cdtor (body) + tree body; +{ + tree scope; + tree block; + + scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); + block = poplevel (0, 0, 0); + SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block; + SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block; + + RECHAIN_STMTS (body, COMPOUND_BODY (body)); + + finish_function (0); +} + +/* Called at end of parsing, but before end-of-file processing. */ + +void +c_objc_common_finish_file () +{ + expand_deferred_fns (); + + if (static_ctors) + { + tree body = start_cdtor ('I'); + + for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors)) + c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors), + NULL_TREE)); + + finish_cdtor (body); + } + + if (static_dtors) + { + tree body = start_cdtor ('D'); + + for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) + c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors), + NULL_TREE)); + + finish_cdtor (body); + } + + { + int flags; + FILE *stream = dump_begin (TDI_all, &flags); + + if (stream) + { + dump_node (getdecls (), flags & ~TDF_SLIM, stream); + dump_end (TDI_all, stream); + } + } +} + /* Called during diagnostic message formatting process to print a source-level entity onto BUFFER. The meaning of the format specifiers is as follows: diff --git a/gcc/c-tree.h b/gcc/c-tree.h index a304b7ebff7..ad8d09a672a 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -153,8 +153,6 @@ extern tree maybe_building_objc_message_expr PARAMS ((void)); extern int recognize_objc_keyword PARAMS ((void)); extern tree lookup_objc_ivar PARAMS ((tree)); -/* in c-lang.c and objc/objc-act.c */ -extern int defer_fn PARAMS ((tree)); /* in c-parse.in */ extern void c_parse_init PARAMS ((void)); @@ -175,6 +173,8 @@ extern int c_disregard_inline_limits PARAMS ((tree)); extern int c_cannot_inline_tree_fn PARAMS ((tree *)); extern const char *c_objc_common_init PARAMS ((const char *)); extern int c_missing_noreturn_ok_p PARAMS ((tree)); +extern void c_objc_common_finish_file PARAMS ((void)); +extern int defer_fn PARAMS ((tree)); #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ c_build_qualified_type (TYPE, \ @@ -372,4 +372,7 @@ extern int mesg_implicit_function_declaration; /* In c-decl.c */ extern void finish_incomplete_decl PARAMS ((tree)); +extern tree static_ctors; +extern tree static_dtors; + #endif /* ! GCC_C_TREE_H */ diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in index 6f48a919da9..602948e872a 100644 --- a/gcc/objc/Make-lang.in +++ b/gcc/objc/Make-lang.in @@ -85,7 +85,7 @@ $(srcdir)/objc/objc-parse.y: $(srcdir)/c-parse.in objc-act.o : $(srcdir)/objc/objc-act.c \ $(CONFIG_H) $(TREE_H) $(RTL_H) $(SYSTEM_H) $(EXPR_H) $(TARGET_H) \ - $(srcdir)/c-tree.h $(srcdir)/c-common.h $(srcdir)/c-lex.h $(VARRAY_H) \ + $(srcdir)/c-tree.h $(srcdir)/c-common.h $(srcdir)/c-lex.h \ $(srcdir)/toplev.h $(srcdir)/flags.h $(srcdir)/objc/objc-act.h \ $(srcdir)/input.h $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/debug.h \ $(srcdir)/langhooks.h $(srcdir)/langhooks-def.h diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 31eb05fc83e..96e13237b24 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -58,7 +58,6 @@ Boston, MA 02111-1307, USA. */ #include "cpplib.h" #include "debug.h" #include "target.h" -#include "varray.h" /* This is the default way of generating a method name. */ /* I am not sure it is really correct. @@ -449,8 +448,6 @@ static int generating_instance_variables = 0; static int print_struct_values = 0; -static varray_type deferred_fns; - /* Some platforms pass small structures through registers versus through an invisible pointer. Determine at what size structure is the transition point between the two possibilities. */ @@ -565,36 +562,13 @@ objc_init (filename) objc_act_parse_init (); - VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns"); - ggc_add_tree_varray_root (&deferred_fns, 1); - return filename; } -/* Register a function tree, so that its optimization and conversion - to RTL is only done at the end of the compilation. */ - -int -defer_fn (fn) - tree fn; -{ - VARRAY_PUSH_TREE (deferred_fns, fn); - - return 1; -} - void finish_file () { - size_t i; - - for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) - /* Don't output the same function twice. We may run into such - situations when an extern inline function is later given a - non-extern-inline definition. */ - if (! TREE_ASM_WRITTEN (VARRAY_TREE (deferred_fns, i))) - c_expand_deferred_function (VARRAY_TREE (deferred_fns, i)); - VARRAY_FREE (deferred_fns); + c_objc_common_finish_file (); finish_objc (); /* Objective-C finalization */ -- 2.30.2