Commit 9dcf6e73 by Joseph Myers Committed by Joseph Myers

langhooks.h (estimate_num_insns, [...]): Remove hooks.

	* langhooks.h (estimate_num_insns, pushlevel, poplevel, set_block,
	maybe_build_cleanup, update_decl_after_saving): Remove hooks.
	* langhooks.c (lhd_clear_binding_stack): Remove.
	* langhooks-def.h (lhd_clear_binding_stack,
	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING,
	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define to lhd_do_nothing.
	* system.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS,
	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_SET_BLOCK,
	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, LANG_HOOKS_POPLEVEL): Poison.
	* tree.h (poplevel): Don't declare.
	* c-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
	* objc/objc-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK,
	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK):
	Remove.

ada:
	* misc.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.

cp:
	* cp-lang.c (LANG_HOOKS_MAYBE_BUILD_CLEANUP, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_UPDATE_DECL_AFTER_SAVING): Remove.
	* cp-tree.h (poplevel): Declare.
	(set_block): Remove.
	* decl.c (set_block): Remove.

fortran:
	* f95-lang.c (set_block): Remove.
	(gfc_clear_binding_stack): New.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
	(struct binding_level): Remove block_created_by_back_end.
	(clear_binding_level): Likewise.
	(poplevel): Don't handle block_created_by_back_end.

java:
	* java-tree.h (set_block): Remove.
	* lang.c (java_clear_binding_stack): New.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
	* decl.c (struct binding_level): Remove this_block.
	(clear_binding_level): Likewise.
	(poplevel): Don't handle this_block.
	(set_block): Remove.

treelang:
	* treetree.c (set_block): Remove.
	(struct binding_level): Remove block_created_by_back_end.
	(clear_binding_level): Likewise.
	(tree_code_create_function_initial,
	tree_code_create_function_wrapup): Call pushlevel and poplevel
	directly rather than through hooks.
	(poplevel): Don't handle block_created_by_back_end.

From-SVN: r84499
parent fae1b38d
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk> 2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* langhooks.h (estimate_num_insns, pushlevel, poplevel, set_block,
maybe_build_cleanup, update_decl_after_saving): Remove hooks.
* langhooks.c (lhd_clear_binding_stack): Remove.
* langhooks-def.h (lhd_clear_binding_stack,
LANG_HOOKS_MAYBE_BUILD_CLEANUP,
LANG_HOOKS_UPDATE_DECL_AFTER_SAVING,
LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS, LANG_HOOKS_PUSHLEVEL,
LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
(LANG_HOOKS_CLEAR_BINDING_STACK): Define to lhd_do_nothing.
* system.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS,
LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_SET_BLOCK,
LANG_HOOKS_MAYBE_BUILD_CLEANUP,
LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, LANG_HOOKS_POPLEVEL): Poison.
* tree.h (poplevel): Don't declare.
* c-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
* objc/objc-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK,
LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK):
Remove.
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
PR tree-optimization/16437 PR tree-optimization/16437
* c-common.c (shorten_compare): Don't mark result of conversion to * c-common.c (shorten_compare): Don't mark result of conversion to
narrower signed type as overflowing. narrower signed type as overflowing.
......
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* misc.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
2004-07-08 Richard Henderson <rth@redhat.com> 2004-07-08 Richard Henderson <rth@redhat.com>
* trans.c (gnat_to_gnu <N_Handled_Sequence_Of_Statements>): Update * trans.c (gnat_to_gnu <N_Handled_Sequence_Of_Statements>): Update
......
...@@ -123,14 +123,6 @@ static void gnat_adjust_rli (record_layout_info); ...@@ -123,14 +123,6 @@ static void gnat_adjust_rli (record_layout_info);
#define LANG_HOOKS_HONOR_READONLY true #define LANG_HOOKS_HONOR_READONLY true
#undef LANG_HOOKS_HASH_TYPES #undef LANG_HOOKS_HASH_TYPES
#define LANG_HOOKS_HASH_TYPES false #define LANG_HOOKS_HASH_TYPES false
#undef LANG_HOOKS_CLEAR_BINDING_STACK
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing
#undef LANG_HOOKS_PUSHLEVEL
#define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i
#undef LANG_HOOKS_POPLEVEL
#define LANG_HOOKS_POPLEVEL lhd_do_nothing_iii_return_null_tree
#undef LANG_HOOKS_SET_BLOCK
#define LANG_HOOKS_SET_BLOCK lhd_do_nothing_t
#undef LANG_HOOKS_GETDECLS #undef LANG_HOOKS_GETDECLS
#define LANG_HOOKS_GETDECLS lhd_return_null_tree_v #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
#undef LANG_HOOKS_PUSHDECL #undef LANG_HOOKS_PUSHDECL
......
...@@ -66,8 +66,6 @@ enum c_language_kind c_language = clk_c; ...@@ -66,8 +66,6 @@ enum c_language_kind c_language = clk_c;
#define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable
#undef LANG_HOOKS_PARSE_FILE #undef LANG_HOOKS_PARSE_FILE
#define LANG_HOOKS_PARSE_FILE c_common_parse_file #define LANG_HOOKS_PARSE_FILE c_common_parse_file
#undef LANG_HOOKS_CLEAR_BINDING_STACK
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing
#undef LANG_HOOKS_TRUTHVALUE_CONVERSION #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
#define LANG_HOOKS_TRUTHVALUE_CONVERSION c_objc_common_truthvalue_conversion #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_objc_common_truthvalue_conversion
#undef LANG_HOOKS_FINISH_INCOMPLETE_DECL #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
...@@ -136,15 +134,9 @@ enum c_language_kind c_language = clk_c; ...@@ -136,15 +134,9 @@ enum c_language_kind c_language = clk_c;
/* The C front end's scoping structure is very different from /* The C front end's scoping structure is very different from
that expected by the language-independent code; it is best that expected by the language-independent code; it is best
to disable all of pushlevel, poplevel, set_block, and getdecls. to disable getdecls.
This means it must also provide its own write_globals. */ This means it must also provide its own write_globals. */
#undef LANG_HOOKS_PUSHLEVEL
#define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i
#undef LANG_HOOKS_POPLEVEL
#define LANG_HOOKS_POPLEVEL lhd_do_nothing_iii_return_null_tree
#undef LANG_HOOKS_SET_BLOCK
#define LANG_HOOKS_SET_BLOCK lhd_do_nothing_t
#undef LANG_HOOKS_GETDECLS #undef LANG_HOOKS_GETDECLS
#define LANG_HOOKS_GETDECLS lhd_return_null_tree_v #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
#undef LANG_HOOKS_WRITE_GLOBALS #undef LANG_HOOKS_WRITE_GLOBALS
......
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* cp-lang.c (LANG_HOOKS_MAYBE_BUILD_CLEANUP, LANG_HOOKS_PUSHLEVEL,
LANG_HOOKS_POPLEVEL, LANG_HOOKS_UPDATE_DECL_AFTER_SAVING): Remove.
* cp-tree.h (poplevel): Declare.
(set_block): Remove.
* decl.c (set_block): Remove.
2004-07-10 Mike Stump <mrs@apple.com> 2004-07-10 Mike Stump <mrs@apple.com>
* decl2.c (import_export_class): Never export/import vtables * decl2.c (import_export_class): Never export/import vtables
......
...@@ -76,8 +76,6 @@ static void cxx_initialize_diagnostics (diagnostic_context *); ...@@ -76,8 +76,6 @@ static void cxx_initialize_diagnostics (diagnostic_context *);
#define LANG_HOOKS_PARSE_FILE c_common_parse_file #define LANG_HOOKS_PARSE_FILE c_common_parse_file
#undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl
#undef LANG_HOOKS_MAYBE_BUILD_CLEANUP
#define LANG_HOOKS_MAYBE_BUILD_CLEANUP cxx_maybe_build_cleanup
#undef LANG_HOOKS_TRUTHVALUE_CONVERSION #undef LANG_HOOKS_TRUTHVALUE_CONVERSION
#define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion
#undef LANG_HOOKS_UNSAFE_FOR_REEVAL #undef LANG_HOOKS_UNSAFE_FOR_REEVAL
...@@ -100,16 +98,10 @@ static void cxx_initialize_diagnostics (diagnostic_context *); ...@@ -100,16 +98,10 @@ static void cxx_initialize_diagnostics (diagnostic_context *);
#define LANG_HOOKS_DECL_PRINTABLE_NAME cxx_printable_name #define LANG_HOOKS_DECL_PRINTABLE_NAME cxx_printable_name
#undef LANG_HOOKS_PRINT_ERROR_FUNCTION #undef LANG_HOOKS_PRINT_ERROR_FUNCTION
#define LANG_HOOKS_PRINT_ERROR_FUNCTION cxx_print_error_function #define LANG_HOOKS_PRINT_ERROR_FUNCTION cxx_print_error_function
#undef LANG_HOOKS_PUSHLEVEL
#define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i
#undef LANG_HOOKS_POPLEVEL
#define LANG_HOOKS_POPLEVEL lhd_do_nothing_iii_return_null_tree
#undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL cxx_warn_unused_global_decl #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL cxx_warn_unused_global_decl
#undef LANG_HOOKS_WRITE_GLOBALS #undef LANG_HOOKS_WRITE_GLOBALS
#define LANG_HOOKS_WRITE_GLOBALS lhd_do_nothing #define LANG_HOOKS_WRITE_GLOBALS lhd_do_nothing
#undef LANG_HOOKS_UPDATE_DECL_AFTER_SAVING
#define LANG_HOOKS_UPDATE_DECL_AFTER_SAVING cp_update_decl_after_saving
#undef LANG_HOOKS_FUNCTION_INIT #undef LANG_HOOKS_FUNCTION_INIT
......
...@@ -3672,8 +3672,8 @@ extern void clone_function_decl (tree, int); ...@@ -3672,8 +3672,8 @@ extern void clone_function_decl (tree, int);
extern void adjust_clone_args (tree); extern void adjust_clone_args (tree);
/* decl.c */ /* decl.c */
extern tree poplevel (int, int, int);
extern void insert_block (tree); extern void insert_block (tree);
extern void set_block (tree);
extern tree pushdecl (tree); extern tree pushdecl (tree);
extern void cxx_init_decl_processing (void); extern void cxx_init_decl_processing (void);
enum cp_tree_node_structure_enum cp_tree_node_structure enum cp_tree_node_structure_enum cp_tree_node_structure
......
...@@ -735,16 +735,6 @@ insert_block (tree block) ...@@ -735,16 +735,6 @@ insert_block (tree block)
= chainon (current_binding_level->blocks, block); = chainon (current_binding_level->blocks, block);
} }
/* Set the BLOCK node for the innermost scope
(the one we are currently in). */
void
set_block (tree block ATTRIBUTE_UNUSED )
{
/* The RTL expansion machinery requires us to provide this callback,
but it is not applicable in function-at-a-time mode. */
}
/* Returns nonzero if T is a virtual function table. */ /* Returns nonzero if T is a virtual function table. */
int int
......
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* f95-lang.c (set_block): Remove.
(gfc_clear_binding_stack): New.
(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
(struct binding_level): Remove block_created_by_back_end.
(clear_binding_level): Likewise.
(poplevel): Don't handle block_created_by_back_end.
2004-07-10 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> 2004-07-10 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
* trans-decl.c (gfc_create_module_variable): Nothing to do if * trans-decl.c (gfc_create_module_variable): Nothing to do if
......
...@@ -103,7 +103,7 @@ static bool gfc_mark_addressable (tree); ...@@ -103,7 +103,7 @@ static bool gfc_mark_addressable (tree);
void do_function_end (void); void do_function_end (void);
int global_bindings_p (void); int global_bindings_p (void);
void insert_block (tree); void insert_block (tree);
void set_block (tree); static void gfc_clear_binding_stack (void);
static void gfc_be_parse_file (int); static void gfc_be_parse_file (int);
static void gfc_expand_function (tree); static void gfc_expand_function (tree);
...@@ -123,6 +123,7 @@ static void gfc_expand_function (tree); ...@@ -123,6 +123,7 @@ static void gfc_expand_function (tree);
#undef LANG_HOOKS_SIGNED_TYPE #undef LANG_HOOKS_SIGNED_TYPE
#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
#undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
#undef LANG_HOOKS_CLEAR_BINDING_STACK
/* Define lang hooks. */ /* Define lang hooks. */
#define LANG_HOOKS_NAME "GNU F95" #define LANG_HOOKS_NAME "GNU F95"
...@@ -141,6 +142,7 @@ static void gfc_expand_function (tree); ...@@ -141,6 +142,7 @@ static void gfc_expand_function (tree);
#define LANG_HOOKS_SIGNED_TYPE gfc_signed_type #define LANG_HOOKS_SIGNED_TYPE gfc_signed_type
#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gfc_signed_or_unsigned_type #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gfc_signed_or_unsigned_type
#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION gfc_expand_function #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION gfc_expand_function
#define LANG_HOOKS_CLEAR_BINDING_STACK gfc_clear_binding_stack
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
...@@ -334,14 +336,6 @@ GTY(()) ...@@ -334,14 +336,6 @@ GTY(())
/* For each level (except the global one), a chain of BLOCK nodes for all /* For each level (except the global one), a chain of BLOCK nodes for all
the levels that were entered and exited one level down from this one. */ the levels that were entered and exited one level down from this one. */
tree blocks; tree blocks;
/* The back end may need, for its own internal processing, to create a BLOCK
node. This field is set aside for this purpose. If this field is non-null
when the level is popped, i.e. when poplevel is invoked, we will use such
block instead of creating a new one from the 'names' field, that is the
..._DECL nodes accumulated so far. Typically the routine 'pushlevel'
will be called before setting this field, so that if the front-end had
inserted ..._DECL nodes in the current block they will not be lost. */
tree block_created_by_back_end;
/* The binding level containing this one (the enclosing binding level). */ /* The binding level containing this one (the enclosing binding level). */
struct binding_level *level_chain; struct binding_level *level_chain;
}; };
...@@ -354,7 +348,7 @@ static GTY(()) struct binding_level *current_binding_level = NULL; ...@@ -354,7 +348,7 @@ static GTY(()) struct binding_level *current_binding_level = NULL;
static GTY(()) struct binding_level *global_binding_level; static GTY(()) struct binding_level *global_binding_level;
/* Binding level structures are initialized by copying this one. */ /* Binding level structures are initialized by copying this one. */
static struct binding_level clear_binding_level = { NULL, NULL, NULL, NULL }; static struct binding_level clear_binding_level = { NULL, NULL, NULL };
/* Return non-zero if we are currently in the global binding level. */ /* Return non-zero if we are currently in the global binding level. */
...@@ -412,7 +406,6 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -412,7 +406,6 @@ poplevel (int keep, int reverse, int functionbody)
tree decl_chain; tree decl_chain;
tree subblock_chain = current_binding_level->blocks; tree subblock_chain = current_binding_level->blocks;
tree subblock_node; tree subblock_node;
tree block_created_by_back_end;
/* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL /* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL
nodes chained through the `names' field of current_binding_level are in nodes chained through the `names' field of current_binding_level are in
...@@ -421,24 +414,10 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -421,24 +414,10 @@ poplevel (int keep, int reverse, int functionbody)
decl_chain = (reverse) ? nreverse (current_binding_level->names) decl_chain = (reverse) ? nreverse (current_binding_level->names)
: current_binding_level->names; : current_binding_level->names;
block_created_by_back_end =
current_binding_level->block_created_by_back_end;
if (block_created_by_back_end != 0)
{
block_node = block_created_by_back_end;
/* Check if we are about to discard some information that was gathered
by the front-end. Nameley check if the back-end created a new block
without calling pushlevel first. To understand why things are lost
just look at the next case (i.e. no block created by back-end. */
if ((keep || functionbody) && (decl_chain || subblock_chain))
abort ();
}
/* If there were any declarations in the current binding level, or if this /* If there were any declarations in the current binding level, or if this
binding level is a function body, or if there are any nested blocks then binding level is a function body, or if there are any nested blocks then
create a BLOCK node to record them for the life of this function. */ create a BLOCK node to record them for the life of this function. */
else if (keep || functionbody) if (keep || functionbody)
block_node = build_block (keep ? decl_chain : 0, 0, subblock_chain, 0, 0); block_node = build_block (keep ? decl_chain : 0, 0, subblock_chain, 0, 0);
/* Record the BLOCK node just built as the subblock its enclosing scope. */ /* Record the BLOCK node just built as the subblock its enclosing scope. */
...@@ -475,9 +454,8 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -475,9 +454,8 @@ poplevel (int keep, int reverse, int functionbody)
} }
else if (block_node) else if (block_node)
{ {
if (block_created_by_back_end == NULL) current_binding_level->blocks
current_binding_level->blocks = chainon (current_binding_level->blocks, block_node);
= chainon (current_binding_level->blocks, block_node);
} }
/* If we did not make a block for the level just exited, any blocks made for /* If we did not make a block for the level just exited, any blocks made for
...@@ -505,15 +483,6 @@ insert_block (tree block) ...@@ -505,15 +483,6 @@ insert_block (tree block)
= chainon (current_binding_level->blocks, block); = chainon (current_binding_level->blocks, block);
} }
/* Set the BLOCK node for the innermost scope
(the one we are currently in). */
void
set_block (tree block)
{
current_binding_level->block_created_by_back_end = block;
}
/* Records a ..._DECL node DECL as belonging to the current lexical scope. /* Records a ..._DECL node DECL as belonging to the current lexical scope.
Returns the ..._DECL node. */ Returns the ..._DECL node. */
...@@ -562,6 +531,15 @@ pushdecl_top_level (tree x) ...@@ -562,6 +531,15 @@ pushdecl_top_level (tree x)
} }
/* Clear the binding stack. */
static void
gfc_clear_binding_stack (void)
{
while (!global_bindings_p ())
poplevel (0, 0, 0);
}
#ifndef CHAR_TYPE_SIZE #ifndef CHAR_TYPE_SIZE
#define CHAR_TYPE_SIZE BITS_PER_UNIT #define CHAR_TYPE_SIZE BITS_PER_UNIT
#endif #endif
......
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* java-tree.h (set_block): Remove.
* lang.c (java_clear_binding_stack): New.
(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
* decl.c (struct binding_level): Remove this_block.
(clear_binding_level): Likewise.
(poplevel): Don't handle this_block.
(set_block): Remove.
2004-07-10 Bryce McKinlay <mckinlay@redhat.com> 2004-07-10 Bryce McKinlay <mckinlay@redhat.com>
* class.c (common_enclosing_context_p): Remove statement with no * class.c (common_enclosing_context_p): Remove statement with no
......
...@@ -299,10 +299,6 @@ struct binding_level GTY(()) ...@@ -299,10 +299,6 @@ struct binding_level GTY(())
that were entered and exited one level down. */ that were entered and exited one level down. */
tree blocks; tree blocks;
/* The BLOCK node for this level, if one has been preallocated.
If 0, the BLOCK is allocated (if needed) when the level is popped. */
tree this_block;
/* The binding level which this one is contained in (inherits from). */ /* The binding level which this one is contained in (inherits from). */
struct binding_level *level_chain; struct binding_level *level_chain;
...@@ -348,7 +344,6 @@ static const struct binding_level clear_binding_level ...@@ -348,7 +344,6 @@ static const struct binding_level clear_binding_level
NULL_TREE, /* names */ NULL_TREE, /* names */
NULL_TREE, /* shadowed */ NULL_TREE, /* shadowed */
NULL_TREE, /* blocks */ NULL_TREE, /* blocks */
NULL_TREE, /* this_lock */
NULL_BINDING_LEVEL, /* level_chain */ NULL_BINDING_LEVEL, /* level_chain */
LARGEST_PC, /* end_pc */ LARGEST_PC, /* end_pc */
0, /* start_pc */ 0, /* start_pc */
...@@ -1276,7 +1271,6 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1276,7 +1271,6 @@ poplevel (int keep, int reverse, int functionbody)
tree block = 0; tree block = 0;
tree decl; tree decl;
tree bind = 0; tree bind = 0;
int block_previously_created;
#if defined(DEBUG_JAVA_BINDING_LEVELS) #if defined(DEBUG_JAVA_BINDING_LEVELS)
binding_depth--; binding_depth--;
...@@ -1319,10 +1313,7 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1319,10 +1313,7 @@ poplevel (int keep, int reverse, int functionbody)
create a BLOCK to record them for the life of this function. */ create a BLOCK to record them for the life of this function. */
block = 0; block = 0;
block_previously_created = (current_binding_level->this_block != 0); if (keep || functionbody)
if (block_previously_created)
block = current_binding_level->this_block;
else if (keep || functionbody)
{ {
block = make_node (BLOCK); block = make_node (BLOCK);
TREE_TYPE (block) = void_type_node; TREE_TYPE (block) = void_type_node;
...@@ -1466,9 +1457,8 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1466,9 +1457,8 @@ poplevel (int keep, int reverse, int functionbody)
{ {
if (block) if (block)
{ {
if (!block_previously_created) current_binding_level->blocks
current_binding_level->blocks = chainon (current_binding_level->blocks, block);
= chainon (current_binding_level->blocks, block);
} }
/* If we did not make a block for the level just exited, /* If we did not make a block for the level just exited,
any blocks made for inner levels any blocks made for inner levels
...@@ -1571,19 +1561,6 @@ insert_block (tree block) ...@@ -1571,19 +1561,6 @@ insert_block (tree block)
= chainon (current_binding_level->blocks, block); = chainon (current_binding_level->blocks, block);
} }
/* Set the BLOCK node for the innermost scope
(the one we are currently in). */
void
set_block (tree block)
{
current_binding_level->this_block = block;
current_binding_level->names = chainon (current_binding_level->names,
BLOCK_VARS (block));
current_binding_level->blocks = chainon (current_binding_level->blocks,
BLOCK_SUBBLOCKS (block));
}
/* integrate_decl_tree calls this function. */ /* integrate_decl_tree calls this function. */
void void
......
...@@ -1171,7 +1171,6 @@ extern tree getdecls (void); ...@@ -1171,7 +1171,6 @@ extern tree getdecls (void);
extern void pushlevel (int); extern void pushlevel (int);
extern tree poplevel (int,int, int); extern tree poplevel (int,int, int);
extern void insert_block (tree); extern void insert_block (tree);
extern void set_block (tree);
extern tree pushdecl (tree); extern tree pushdecl (tree);
extern void java_init_decl_processing (void); extern void java_init_decl_processing (void);
extern void java_dup_lang_specific_decl (tree); extern void java_dup_lang_specific_decl (tree);
......
...@@ -67,6 +67,7 @@ static bool java_dump_tree (void *, tree); ...@@ -67,6 +67,7 @@ static bool java_dump_tree (void *, tree);
static void dump_compound_expr (dump_info_p, tree); static void dump_compound_expr (dump_info_p, tree);
static bool java_decl_ok_for_sibcall (tree); static bool java_decl_ok_for_sibcall (tree);
static tree java_get_callee_fndecl (tree); static tree java_get_callee_fndecl (tree);
static void java_clear_binding_stack (void);
#ifndef TARGET_OBJECT_SUFFIX #ifndef TARGET_OBJECT_SUFFIX
# define TARGET_OBJECT_SUFFIX ".o" # define TARGET_OBJECT_SUFFIX ".o"
...@@ -264,6 +265,9 @@ struct language_function GTY(()) ...@@ -264,6 +265,9 @@ struct language_function GTY(())
#undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION java_expand_body #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION java_expand_body
#undef LANG_HOOKS_CLEAR_BINDING_STACK
#define LANG_HOOKS_CLEAR_BINDING_STACK java_clear_binding_stack
/* 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;
...@@ -1160,4 +1164,13 @@ java_get_callee_fndecl (tree call_expr) ...@@ -1160,4 +1164,13 @@ java_get_callee_fndecl (tree call_expr)
return NULL; return NULL;
} }
/* Clear the binding stack. */
static void
java_clear_binding_stack (void)
{
while (!global_bindings_p ())
poplevel (0, 0, 0);
}
#include "gt-java-lang.h" #include "gt-java-lang.h"
...@@ -52,7 +52,6 @@ extern tree lhd_do_nothing_iii_return_null_tree (int, int, int); ...@@ -52,7 +52,6 @@ extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
extern int lhd_safe_from_p (rtx, tree); extern int lhd_safe_from_p (rtx, tree);
extern int lhd_staticp (tree); extern int lhd_staticp (tree);
extern int lhd_unsafe_for_reeval (tree); extern int lhd_unsafe_for_reeval (tree);
extern void lhd_clear_binding_stack (void);
extern void lhd_print_tree_nothing (FILE *, tree, int); extern void lhd_print_tree_nothing (FILE *, tree, int);
extern const char *lhd_decl_printable_name (tree, int); extern const char *lhd_decl_printable_name (tree, int);
extern int lhd_types_compatible_p (tree, tree); extern int lhd_types_compatible_p (tree, tree);
...@@ -97,7 +96,7 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *); ...@@ -97,7 +96,7 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
#define LANG_HOOKS_INIT hook_bool_void_false #define LANG_HOOKS_INIT hook_bool_void_false
#define LANG_HOOKS_FINISH lhd_do_nothing #define LANG_HOOKS_FINISH lhd_do_nothing
#define LANG_HOOKS_PARSE_FILE lhd_do_nothing_i #define LANG_HOOKS_PARSE_FILE lhd_do_nothing_i
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_clear_binding_stack #define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing
#define LANG_HOOKS_INIT_OPTIONS hook_uint_uint_constcharptrptr_0 #define LANG_HOOKS_INIT_OPTIONS hook_uint_uint_constcharptrptr_0
#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics
#define LANG_HOOKS_HANDLE_OPTION hook_int_size_t_constcharptr_int_0 #define LANG_HOOKS_HANDLE_OPTION hook_int_size_t_constcharptr_int_0
...@@ -113,7 +112,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *); ...@@ -113,7 +112,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
#define LANG_HOOKS_STATICP lhd_staticp #define LANG_HOOKS_STATICP lhd_staticp
#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t
#define LANG_HOOKS_UNSAVE_EXPR_NOW lhd_unsave_expr_now #define LANG_HOOKS_UNSAVE_EXPR_NOW lhd_unsave_expr_now
#define LANG_HOOKS_MAYBE_BUILD_CLEANUP lhd_return_null_tree
#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name
#define LANG_HOOKS_CAN_USE_BIT_FIELDS_P lhd_can_use_bit_fields_p #define LANG_HOOKS_CAN_USE_BIT_FIELDS_P lhd_can_use_bit_fields_p
#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS false #define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS false
...@@ -130,7 +128,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *); ...@@ -130,7 +128,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
#define LANG_HOOKS_EXPR_SIZE lhd_expr_size #define LANG_HOOKS_EXPR_SIZE lhd_expr_size
#define LANG_HOOKS_TREE_SIZE lhd_tree_size #define LANG_HOOKS_TREE_SIZE lhd_tree_size
#define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p #define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p
#define LANG_HOOKS_UPDATE_DECL_AFTER_SAVING NULL
#define LANG_HOOKS_FUNCTION_INIT lhd_do_nothing_f #define LANG_HOOKS_FUNCTION_INIT lhd_do_nothing_f
#define LANG_HOOKS_FUNCTION_FINAL lhd_do_nothing_f #define LANG_HOOKS_FUNCTION_FINAL lhd_do_nothing_f
...@@ -165,8 +162,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *); ...@@ -165,8 +162,6 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
lhd_tree_inlining_end_inlining lhd_tree_inlining_end_inlining
#define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
lhd_tree_inlining_convert_parm_for_inlining lhd_tree_inlining_convert_parm_for_inlining
#define LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
NULL
#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \ #define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \ LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \
...@@ -179,8 +174,7 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *); ...@@ -179,8 +174,7 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \ LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
LANG_HOOKS_TREE_INLINING_START_INLINING, \ LANG_HOOKS_TREE_INLINING_START_INLINING, \
LANG_HOOKS_TREE_INLINING_END_INLINING, \ LANG_HOOKS_TREE_INLINING_END_INLINING, \
LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING, \ LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
} }
#define LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR lhd_callgraph_analyze_expr #define LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR lhd_callgraph_analyze_expr
...@@ -240,11 +234,8 @@ extern tree lhd_make_node (enum tree_code); ...@@ -240,11 +234,8 @@ extern tree lhd_make_node (enum tree_code);
} }
/* Declaration hooks. */ /* Declaration hooks. */
#define LANG_HOOKS_PUSHLEVEL pushlevel
#define LANG_HOOKS_POPLEVEL poplevel
#define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
#define LANG_HOOKS_INSERT_BLOCK insert_block #define LANG_HOOKS_INSERT_BLOCK insert_block
#define LANG_HOOKS_SET_BLOCK set_block
#define LANG_HOOKS_PUSHDECL pushdecl #define LANG_HOOKS_PUSHDECL pushdecl
#define LANG_HOOKS_GETDECLS getdecls #define LANG_HOOKS_GETDECLS getdecls
#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
...@@ -253,11 +244,8 @@ extern tree lhd_make_node (enum tree_code); ...@@ -253,11 +244,8 @@ extern tree lhd_make_node (enum tree_code);
#define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall #define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
#define LANG_HOOKS_DECLS { \ #define LANG_HOOKS_DECLS { \
LANG_HOOKS_PUSHLEVEL, \
LANG_HOOKS_POPLEVEL, \
LANG_HOOKS_GLOBAL_BINDINGS_P, \ LANG_HOOKS_GLOBAL_BINDINGS_P, \
LANG_HOOKS_INSERT_BLOCK, \ LANG_HOOKS_INSERT_BLOCK, \
LANG_HOOKS_SET_BLOCK, \
LANG_HOOKS_PUSHDECL, \ LANG_HOOKS_PUSHDECL, \
LANG_HOOKS_GETDECLS, \ LANG_HOOKS_GETDECLS, \
LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \ LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
...@@ -292,7 +280,6 @@ extern tree lhd_make_node (enum tree_code); ...@@ -292,7 +280,6 @@ extern tree lhd_make_node (enum tree_code);
LANG_HOOKS_STATICP, \ LANG_HOOKS_STATICP, \
LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \ LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \
LANG_HOOKS_UNSAVE_EXPR_NOW, \ LANG_HOOKS_UNSAVE_EXPR_NOW, \
LANG_HOOKS_MAYBE_BUILD_CLEANUP, \
LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \ LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \
LANG_HOOKS_CAN_USE_BIT_FIELDS_P, \ LANG_HOOKS_CAN_USE_BIT_FIELDS_P, \
LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS, \ LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS, \
...@@ -308,7 +295,6 @@ extern tree lhd_make_node (enum tree_code); ...@@ -308,7 +295,6 @@ extern tree lhd_make_node (enum tree_code);
LANG_HOOKS_GET_CALLEE_FNDECL, \ LANG_HOOKS_GET_CALLEE_FNDECL, \
LANG_HOOKS_PRINT_ERROR_FUNCTION, \ LANG_HOOKS_PRINT_ERROR_FUNCTION, \
LANG_HOOKS_EXPR_SIZE, \ LANG_HOOKS_EXPR_SIZE, \
LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, \
LANG_HOOKS_ATTRIBUTE_TABLE, \ LANG_HOOKS_ATTRIBUTE_TABLE, \
LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \ LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \ LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
......
...@@ -205,15 +205,6 @@ lhd_can_use_bit_fields_p (void) ...@@ -205,15 +205,6 @@ lhd_can_use_bit_fields_p (void)
return true; return true;
} }
/* Provide a default routine to clear the binding stack. This is used
by languages that don't need to do anything special. */
void
lhd_clear_binding_stack (void)
{
while (! lang_hooks.decls.global_bindings_p ())
lang_hooks.decls.poplevel (0, 0, 0);
}
/* Type promotion for variable arguments. */ /* Type promotion for variable arguments. */
tree tree
lhd_type_promotes_to (tree type ATTRIBUTE_UNUSED) lhd_type_promotes_to (tree type ATTRIBUTE_UNUSED)
......
...@@ -47,7 +47,6 @@ struct lang_hooks_for_tree_inlining ...@@ -47,7 +47,6 @@ struct lang_hooks_for_tree_inlining
int (*start_inlining) (tree); int (*start_inlining) (tree);
void (*end_inlining) (tree); void (*end_inlining) (tree);
tree (*convert_parm_for_inlining) (tree, tree, tree, int); tree (*convert_parm_for_inlining) (tree, tree, tree, int);
int (*estimate_num_insns) (tree);
}; };
struct lang_hooks_for_callgraph struct lang_hooks_for_callgraph
...@@ -155,17 +154,6 @@ struct lang_hooks_for_types ...@@ -155,17 +154,6 @@ struct lang_hooks_for_types
struct lang_hooks_for_decls struct lang_hooks_for_decls
{ {
/* Enter a new lexical scope. Argument is always zero when called
from outside the front end. */
void (*pushlevel) (int);
/* Exit a lexical scope and return a BINDING for that scope.
Takes three arguments:
KEEP -- nonzero if there were declarations in this scope.
REVERSE -- reverse the order of decls before returning them.
FUNCTIONBODY -- nonzero if this level is the body of a function. */
tree (*poplevel) (int, int, int);
/* Returns nonzero if we are in the global binding level. Ada /* Returns nonzero if we are in the global binding level. Ada
returns -1 for an undocumented reason used in stor-layout.c. */ returns -1 for an undocumented reason used in stor-layout.c. */
int (*global_bindings_p) (void); int (*global_bindings_p) (void);
...@@ -175,9 +163,6 @@ struct lang_hooks_for_decls ...@@ -175,9 +163,6 @@ struct lang_hooks_for_decls
to handle the BLOCK node inside the BIND_EXPR. */ to handle the BLOCK node inside the BIND_EXPR. */
void (*insert_block) (tree); void (*insert_block) (tree);
/* Set the BLOCK node for the current scope level. */
void (*set_block) (tree);
/* Function to add a decl to the current scope level. Takes one /* Function to add a decl to the current scope level. Takes one
argument, a decl to add. Returns that decl, or, if the same argument, a decl to add. Returns that decl, or, if the same
symbol is already declared, may return a different decl for that symbol is already declared, may return a different decl for that
...@@ -332,10 +317,6 @@ struct lang_hooks ...@@ -332,10 +317,6 @@ struct lang_hooks
things are cleared out. */ things are cleared out. */
tree (*unsave_expr_now) (tree); tree (*unsave_expr_now) (tree);
/* Called by expand_expr to build and return the cleanup-expression
for the passed TARGET_EXPR. Return NULL if there is none. */
tree (*maybe_build_cleanup) (tree);
/* Set the DECL_ASSEMBLER_NAME for a node. If it is the sort of /* Set the DECL_ASSEMBLER_NAME for a node. If it is the sort of
thing that the assembler should talk about, set thing that the assembler should talk about, set
DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE. DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
...@@ -398,9 +379,6 @@ struct lang_hooks ...@@ -398,9 +379,6 @@ struct lang_hooks
semantics in cases that it doesn't want to handle specially. */ semantics in cases that it doesn't want to handle specially. */
tree (*expr_size) (tree); tree (*expr_size) (tree);
/* Update lang specific fields after duplicating function body. */
void (*update_decl_after_saving) (tree, void *);
/* Pointers to machine-independent attribute tables, for front ends /* Pointers to machine-independent attribute tables, for front ends
using attribs.c. If one is NULL, it is ignored. Respectively, a using attribs.c. If one is NULL, it is ignored. Respectively, a
table of attributes specific to the language, a table of table of attributes specific to the language, a table of
......
...@@ -57,8 +57,6 @@ enum c_language_kind c_language = clk_objc; ...@@ -57,8 +57,6 @@ enum c_language_kind c_language = clk_objc;
#define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set #define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
#undef LANG_HOOKS_PARSE_FILE #undef LANG_HOOKS_PARSE_FILE
#define LANG_HOOKS_PARSE_FILE c_common_parse_file #define LANG_HOOKS_PARSE_FILE c_common_parse_file
#undef LANG_HOOKS_CLEAR_BINDING_STACK
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing
#undef LANG_HOOKS_EXPAND_EXPR #undef LANG_HOOKS_EXPAND_EXPR
#define LANG_HOOKS_EXPAND_EXPR c_expand_expr #define LANG_HOOKS_EXPAND_EXPR c_expand_expr
#undef LANG_HOOKS_EXPAND_DECL #undef LANG_HOOKS_EXPAND_DECL
...@@ -135,15 +133,9 @@ enum c_language_kind c_language = clk_objc; ...@@ -135,15 +133,9 @@ enum c_language_kind c_language = clk_objc;
/* The C front end's scoping structure is very different from /* The C front end's scoping structure is very different from
that expected by the language-independent code; it is best that expected by the language-independent code; it is best
to disable all of pushlevel, poplevel, set_block, and getdecls. to disable getdecls.
This means it must also provide its own write_globals. */ This means it must also provide its own write_globals. */
#undef LANG_HOOKS_PUSHLEVEL
#define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i
#undef LANG_HOOKS_POPLEVEL
#define LANG_HOOKS_POPLEVEL lhd_do_nothing_iii_return_null_tree
#undef LANG_HOOKS_SET_BLOCK
#define LANG_HOOKS_SET_BLOCK lhd_do_nothing_t
#undef LANG_HOOKS_GETDECLS #undef LANG_HOOKS_GETDECLS
#define LANG_HOOKS_GETDECLS lhd_return_null_tree_v #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v
#undef LANG_HOOKS_WRITE_GLOBALS #undef LANG_HOOKS_WRITE_GLOBALS
......
...@@ -626,7 +626,11 @@ extern int snprintf (char *, size_t, const char *, ...); ...@@ -626,7 +626,11 @@ extern int snprintf (char *, size_t, const char *, ...);
/* Hooks that are no longer used. */ /* Hooks that are no longer used. */
#pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \
LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \
LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \
LANG_HOOKS_POPLEVEL
/* Libiberty macros that are no longer used in GCC. */ /* Libiberty macros that are no longer used in GCC. */
#undef ANSI_PROTOTYPES #undef ANSI_PROTOTYPES
......
...@@ -3311,10 +3311,6 @@ extern GTY(()) tree current_file_decl; ...@@ -3311,10 +3311,6 @@ extern GTY(()) tree current_file_decl;
extern int all_types_permanent; extern int all_types_permanent;
/* Exit a binding level. This function is provided by each language
frontend. */
extern tree poplevel (int, int, int);
/* Declare a predefined function. Return the declaration. This function is /* Declare a predefined function. Return the declaration. This function is
provided by each language frontend. */ provided by each language frontend. */
extern tree builtin_function (const char *, tree, int, enum built_in_class, extern tree builtin_function (const char *, tree, int, enum built_in_class,
......
2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
* treetree.c (set_block): Remove.
(struct binding_level): Remove block_created_by_back_end.
(clear_binding_level): Likewise.
(tree_code_create_function_initial,
tree_code_create_function_wrapup): Call pushlevel and poplevel
directly rather than through hooks.
(poplevel): Don't handle block_created_by_back_end.
2004-04-07 Richard Henderson <rth@redhat.com> 2004-04-07 Richard Henderson <rth@redhat.com>
* treetree.c (tree_mark_addressable): Don't put_var_into_stack. * treetree.c (tree_mark_addressable): Don't put_var_into_stack.
......
...@@ -135,7 +135,6 @@ void pushlevel (int ignore); ...@@ -135,7 +135,6 @@ void pushlevel (int ignore);
tree poplevel (int keep, int reverse, int functionbody); tree poplevel (int keep, int reverse, int functionbody);
int global_bindings_p (void); int global_bindings_p (void);
void insert_block (tree block); void insert_block (tree block);
void set_block (tree block);
tree pushdecl (tree decl); tree pushdecl (tree decl);
tree getdecls (void); tree getdecls (void);
int kept_level_p (void); int kept_level_p (void);
...@@ -451,7 +450,7 @@ tree_code_create_function_initial (tree prev_saved, ...@@ -451,7 +450,7 @@ tree_code_create_function_initial (tree prev_saved,
/* Function.c requires a push at the start of the function. that /* Function.c requires a push at the start of the function. that
looks like a bug to me but let's make it happy. */ looks like a bug to me but let's make it happy. */
(*lang_hooks.decls.pushlevel) (0); pushlevel (0);
/* Create rtl for the start of a new scope. */ /* Create rtl for the start of a new scope. */
...@@ -482,7 +481,7 @@ tree_code_create_function_initial (tree prev_saved, ...@@ -482,7 +481,7 @@ tree_code_create_function_initial (tree prev_saved,
/* Add a new level to the debugger symbol table. */ /* Add a new level to the debugger symbol table. */
(*lang_hooks.decls.pushlevel) (0); pushlevel (0);
/* Create rtl for the start of a new scope. */ /* Create rtl for the start of a new scope. */
...@@ -504,7 +503,7 @@ tree_code_create_function_wrapup (location_t loc) ...@@ -504,7 +503,7 @@ tree_code_create_function_wrapup (location_t loc)
/* Get completely built level from debugger symbol table. */ /* Get completely built level from debugger symbol table. */
block = (*lang_hooks.decls.poplevel) (1, 0, 0); block = poplevel (1, 0, 0);
/* Emit rtl for end of scope. */ /* Emit rtl for end of scope. */
...@@ -516,7 +515,7 @@ tree_code_create_function_wrapup (location_t loc) ...@@ -516,7 +515,7 @@ tree_code_create_function_wrapup (location_t loc)
/* Pop the level. */ /* Pop the level. */
block = (*lang_hooks.decls.poplevel) (1, 0, 1); block = poplevel (1, 0, 1);
/* And attach it to the function. */ /* And attach it to the function. */
...@@ -1057,14 +1056,6 @@ struct binding_level ...@@ -1057,14 +1056,6 @@ struct binding_level
/* For each level (except the global one), a chain of BLOCK nodes for all /* For each level (except the global one), a chain of BLOCK nodes for all
the levels that were entered and exited one level down from this one. */ the levels that were entered and exited one level down from this one. */
tree blocks; tree blocks;
/* The back end may need, for its own internal processing, to create a BLOCK
node. This field is set aside for this purpose. If this field is non-null
when the level is popped, i.e. when poplevel is invoked, we will use such
block instead of creating a new one from the 'names' field, that is the
..._DECL nodes accumulated so far. Typically the routine 'pushlevel'
will be called before setting this field, so that if the front-end had
inserted ..._DECL nodes in the current block they will not be lost. */
tree block_created_by_back_end;
/* The binding level containing this one (the enclosing binding level). */ /* The binding level containing this one (the enclosing binding level). */
struct binding_level *level_chain; struct binding_level *level_chain;
}; };
...@@ -1077,7 +1068,7 @@ static struct binding_level *current_binding_level = NULL; ...@@ -1077,7 +1068,7 @@ static struct binding_level *current_binding_level = NULL;
static struct binding_level *global_binding_level; static struct binding_level *global_binding_level;
/* Binding level structures are initialized by copying this one. */ /* Binding level structures are initialized by copying this one. */
static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL}; static struct binding_level clear_binding_level = {NULL, NULL, NULL };
/* Return non-zero if we are currently in the global binding level. */ /* Return non-zero if we are currently in the global binding level. */
...@@ -1145,7 +1136,6 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1145,7 +1136,6 @@ poplevel (int keep, int reverse, int functionbody)
tree decl_chain; tree decl_chain;
tree subblock_chain = current_binding_level->blocks; tree subblock_chain = current_binding_level->blocks;
tree subblock_node; tree subblock_node;
tree block_created_by_back_end;
/* Reverse the list of *_DECL nodes if desired. Note that the ..._DECL /* Reverse the list of *_DECL nodes if desired. Note that the ..._DECL
nodes chained through the `names' field of current_binding_level are in nodes chained through the `names' field of current_binding_level are in
...@@ -1154,23 +1144,10 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1154,23 +1144,10 @@ poplevel (int keep, int reverse, int functionbody)
decl_chain = (reverse) ? nreverse (current_binding_level->names) decl_chain = (reverse) ? nreverse (current_binding_level->names)
: current_binding_level->names; : current_binding_level->names;
block_created_by_back_end = current_binding_level->block_created_by_back_end;
if (block_created_by_back_end != 0)
{
block_node = block_created_by_back_end;
/* Check if we are about to discard some information that was gathered
by the front-end. Nameley check if the back-end created a new block
without calling pushlevel first. To understand why things are lost
just look at the next case (i.e. no block created by back-end. */
if ((keep || functionbody) && (decl_chain || subblock_chain))
abort ();
}
/* If there were any declarations in the current binding level, or if this /* If there were any declarations in the current binding level, or if this
binding level is a function body, or if there are any nested blocks then binding level is a function body, or if there are any nested blocks then
create a BLOCK node to record them for the life of this function. */ create a BLOCK node to record them for the life of this function. */
else if (keep || functionbody) if (keep || functionbody)
block_node = build_block (keep ? decl_chain : 0, 0, subblock_chain, 0, 0); block_node = build_block (keep ? decl_chain : 0, 0, subblock_chain, 0, 0);
/* Record the BLOCK node just built as the subblock its enclosing scope. */ /* Record the BLOCK node just built as the subblock its enclosing scope. */
...@@ -1207,9 +1184,8 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -1207,9 +1184,8 @@ poplevel (int keep, int reverse, int functionbody)
} }
else if (block_node) else if (block_node)
{ {
if (block_created_by_back_end == NULL) current_binding_level->blocks
current_binding_level->blocks = chainon (current_binding_level->blocks, block_node);
= chainon (current_binding_level->blocks, block_node);
} }
/* If we did not make a block for the level just exited, any blocks made for /* If we did not make a block for the level just exited, any blocks made for
...@@ -1237,15 +1213,6 @@ insert_block (tree block) ...@@ -1237,15 +1213,6 @@ insert_block (tree block)
= chainon (current_binding_level->blocks, block); = chainon (current_binding_level->blocks, block);
} }
/* Set the BLOCK node for the innermost scope
(the one we are currently in). */
void
set_block (tree block)
{
current_binding_level->block_created_by_back_end = block;
}
/* Records a ..._DECL node DECL as belonging to the current lexical scope. /* Records a ..._DECL node DECL as belonging to the current lexical scope.
Returns the ..._DECL node. */ Returns the ..._DECL node. */
......
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