Commit 3b27886e by Neil Booth Committed by Neil Booth

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
parent 9e78e45a
2001-12-17 Neil Booth <neil@daikokuya.demon.co.uk>
* 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 <aldyh@redhat.com> 2001-12-17 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.c: Remove is_gpr_return_reg prototype. * config/rs6000/rs6000.c: Remove is_gpr_return_reg prototype.
......
...@@ -1157,15 +1157,15 @@ c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \ ...@@ -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) \ 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) $(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) \ c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
$(GGC_H) toplev.h function.h $(VARRAY_H) \ langhooks.h langhooks-def.h
$(RTL_H) $(EXPR_H) langhooks.h langhooks-def.h
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \ c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
debug.h $(C_TREE_H) \ debug.h $(C_TREE_H) \
c-pragma.h input.h intl.h flags.h toplev.h output.h \ c-pragma.h input.h intl.h flags.h toplev.h output.h \
mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_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-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) \ $(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) \ c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
flags.h toplev.h flags.h toplev.h
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h
......
...@@ -23,14 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -23,14 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "tree.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 "c-tree.h"
#include "varray.h"
#include "langhooks.h" #include "langhooks.h"
#include "langhooks-def.h" #include "langhooks-def.h"
...@@ -78,8 +71,6 @@ static void c_post_options PARAMS ((void)); ...@@ -78,8 +71,6 @@ static void c_post_options PARAMS ((void));
/* Each front end provides its own. */ /* Each front end provides its own. */
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
static varray_type deferred_fns;
/* Post-switch processing. */ /* Post-switch processing. */
static void static void
c_post_options () c_post_options ()
...@@ -97,12 +88,7 @@ static const char * ...@@ -97,12 +88,7 @@ static const char *
c_init (filename) c_init (filename)
const char *filename; const char *filename;
{ {
filename = c_objc_common_init (filename); return c_objc_common_init (filename);
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
ggc_add_tree_varray_root (&deferred_fns, 1);
return filename;
} }
/* Used by c-lex.c, but only for objc. */ /* Used by c-lex.c, but only for objc. */
...@@ -157,119 +143,8 @@ lookup_objc_ivar (id) ...@@ -157,119 +143,8 @@ lookup_objc_ivar (id)
return 0; 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 void
finish_file () finish_file ()
{ {
unsigned int i; c_objc_common_finish_file ();
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);
}
}
} }
...@@ -31,9 +31,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -31,9 +31,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "toplev.h" #include "toplev.h"
#include "diagnostic.h" #include "diagnostic.h"
#include "tree-inline.h" #include "tree-inline.h"
#include "varray.h"
#include "ggc.h"
static int c_tree_printer PARAMS ((output_buffer *)); static int c_tree_printer PARAMS ((output_buffer *));
static tree inline_forbidden_p PARAMS ((tree *, int *, void *)); 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 int
c_missing_noreturn_ok_p (decl) c_missing_noreturn_ok_p (decl)
...@@ -227,9 +234,133 @@ c_objc_common_init (filename) ...@@ -227,9 +234,133 @@ c_objc_common_init (filename)
mesg_implicit_function_declaration = 0; mesg_implicit_function_declaration = 0;
} }
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
ggc_add_tree_varray_root (&deferred_fns, 1);
return filename; 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 /* Called during diagnostic message formatting process to print a
source-level entity onto BUFFER. The meaning of the format specifiers source-level entity onto BUFFER. The meaning of the format specifiers
is as follows: is as follows:
......
...@@ -153,8 +153,6 @@ extern tree maybe_building_objc_message_expr PARAMS ((void)); ...@@ -153,8 +153,6 @@ extern tree maybe_building_objc_message_expr PARAMS ((void));
extern int recognize_objc_keyword PARAMS ((void)); extern int recognize_objc_keyword PARAMS ((void));
extern tree lookup_objc_ivar PARAMS ((tree)); 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 */ /* in c-parse.in */
extern void c_parse_init PARAMS ((void)); extern void c_parse_init PARAMS ((void));
...@@ -175,6 +173,8 @@ extern int c_disregard_inline_limits PARAMS ((tree)); ...@@ -175,6 +173,8 @@ extern int c_disregard_inline_limits PARAMS ((tree));
extern int c_cannot_inline_tree_fn PARAMS ((tree *)); extern int c_cannot_inline_tree_fn PARAMS ((tree *));
extern const char *c_objc_common_init PARAMS ((const char *)); extern const char *c_objc_common_init PARAMS ((const char *));
extern int c_missing_noreturn_ok_p PARAMS ((tree)); 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) \ #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \
c_build_qualified_type (TYPE, \ c_build_qualified_type (TYPE, \
...@@ -372,4 +372,7 @@ extern int mesg_implicit_function_declaration; ...@@ -372,4 +372,7 @@ extern int mesg_implicit_function_declaration;
/* In c-decl.c */ /* In c-decl.c */
extern void finish_incomplete_decl PARAMS ((tree)); extern void finish_incomplete_decl PARAMS ((tree));
extern tree static_ctors;
extern tree static_dtors;
#endif /* ! GCC_C_TREE_H */ #endif /* ! GCC_C_TREE_H */
...@@ -85,7 +85,7 @@ $(srcdir)/objc/objc-parse.y: $(srcdir)/c-parse.in ...@@ -85,7 +85,7 @@ $(srcdir)/objc/objc-parse.y: $(srcdir)/c-parse.in
objc-act.o : $(srcdir)/objc/objc-act.c \ objc-act.o : $(srcdir)/objc/objc-act.c \
$(CONFIG_H) $(TREE_H) $(RTL_H) $(SYSTEM_H) $(EXPR_H) $(TARGET_H) \ $(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)/toplev.h $(srcdir)/flags.h $(srcdir)/objc/objc-act.h \
$(srcdir)/input.h $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/debug.h \ $(srcdir)/input.h $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/debug.h \
$(srcdir)/langhooks.h $(srcdir)/langhooks-def.h $(srcdir)/langhooks.h $(srcdir)/langhooks-def.h
......
...@@ -58,7 +58,6 @@ Boston, MA 02111-1307, USA. */ ...@@ -58,7 +58,6 @@ Boston, MA 02111-1307, USA. */
#include "cpplib.h" #include "cpplib.h"
#include "debug.h" #include "debug.h"
#include "target.h" #include "target.h"
#include "varray.h"
/* This is the default way of generating a method name. */ /* This is the default way of generating a method name. */
/* I am not sure it is really correct. /* I am not sure it is really correct.
...@@ -449,8 +448,6 @@ static int generating_instance_variables = 0; ...@@ -449,8 +448,6 @@ static int generating_instance_variables = 0;
static int print_struct_values = 0; static int print_struct_values = 0;
static varray_type deferred_fns;
/* Some platforms pass small structures through registers versus through /* Some platforms pass small structures through registers versus through
an invisible pointer. Determine at what size structure is the an invisible pointer. Determine at what size structure is the
transition point between the two possibilities. */ transition point between the two possibilities. */
...@@ -565,36 +562,13 @@ objc_init (filename) ...@@ -565,36 +562,13 @@ objc_init (filename)
objc_act_parse_init (); objc_act_parse_init ();
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
ggc_add_tree_varray_root (&deferred_fns, 1);
return filename; 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 void
finish_file () finish_file ()
{ {
size_t i; c_objc_common_finish_file ();
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);
finish_objc (); /* Objective-C finalization */ finish_objc (); /* Objective-C finalization */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment