java-tree.h (throw_node): Define as a single member of java_global_trees instead of a separate array.

* java-tree.h (throw_node): Define as a single member of
        java_global_trees instead of a separate array.
        (JTI_THROW_NODE): New.
        * decl.c (throw_node): Don't declare.
        (init_decl_processing): Init a scalar throw_node.
        Don't register it for gc.
        * check-init.c (check_init): Reference scalar throw_node.
        * expr.c (build_java_athrow): Likewise.
        * jcf-write.c (generate_bytecode_insns): Likewise.
        * parse.h (BUILD_THROW): Likewise.

From-SVN: r40922
This commit is contained in:
Richard Henderson 2001-03-28 00:59:30 -08:00 committed by Richard Henderson
parent da7da8f977
commit ce1c98ea45
7 changed files with 32 additions and 28 deletions

View file

@ -1,3 +1,16 @@
2001-03-28 Richard Henderson <rth@redhat.com>
* java-tree.h (throw_node): Define as a single member of
java_global_trees instead of a separate array.
(JTI_THROW_NODE): New.
* decl.c (throw_node): Don't declare.
(init_decl_processing): Init a scalar throw_node.
Don't register it for gc.
* check-init.c (check_init): Reference scalar throw_node.
* expr.c (build_java_athrow): Likewise.
* jcf-write.c (generate_bytecode_insns): Likewise.
* parse.h (BUILD_THROW): Likewise.
2001-03-28 Richard Henderson <rth@redhat.com>
* decl.c (end_java_method): Do not save and restore

View file

@ -694,8 +694,7 @@ check_init (exp, before)
for ( ; x != NULL_TREE; x = TREE_CHAIN (x))
check_init (TREE_VALUE (x), before);
if (func == throw_node[0]
|| func == throw_node[1])
if (func == throw_node)
goto never_continues;
}
break;

View file

@ -72,8 +72,6 @@ tree decl_map;
static tree pending_local_decls = NULL_TREE;
tree throw_node [2];
/* Push a local variable or stack slot into the decl_map,
and assign it an rtl. */
@ -727,18 +725,13 @@ init_decl_processing ()
t),
0, NOT_BUILT_IN,
NULL_PTR);
throw_node[0] = builtin_function ("_Jv_Throw",
build_function_type (ptr_type_node, t),
0, NOT_BUILT_IN, NULL_PTR);
throw_node = builtin_function ((USING_SJLJ_EXCEPTIONS
? "_Jv_Throw" : "_Jv_Sjlj_Throw"),
build_function_type (ptr_type_node, t),
0, NOT_BUILT_IN, NULL_PTR);
/* Mark throw_nodes as `noreturn' functions with side effects. */
TREE_THIS_VOLATILE (throw_node[0]) = 1;
TREE_SIDE_EFFECTS (throw_node[0]) = 1;
t = tree_cons (NULL_TREE, ptr_type_node, endlink);
throw_node[1] = builtin_function ("_Jv_Sjlj_Throw",
build_function_type (ptr_type_node, t),
0, NOT_BUILT_IN, NULL_PTR);
TREE_THIS_VOLATILE (throw_node[1]) = 1;
TREE_SIDE_EFFECTS (throw_node[1]) = 1;
TREE_THIS_VOLATILE (throw_node) = 1;
TREE_SIDE_EFFECTS (throw_node) = 1;
t = build_function_type (int_type_node, endlink);
soft_monitorenter_node
= builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN,
@ -884,8 +877,6 @@ init_decl_processing ()
/* Register nodes with the garbage collector. */
ggc_add_tree_root (java_global_trees,
sizeof (java_global_trees) / sizeof (tree));
ggc_add_tree_root (throw_node,
sizeof (throw_node) / sizeof (tree));
ggc_add_tree_root (predef_filenames,
sizeof (predef_filenames) / sizeof (tree));
ggc_add_tree_root (&decl_map, 1);

View file

@ -600,7 +600,7 @@ build_java_athrow (node)
call = build (CALL_EXPR,
void_type_node,
build_address_of (throw_node[USING_SJLJ_EXCEPTIONS ? 1 : 0]),
build_address_of (throw_node),
build_tree_list (NULL_TREE, node),
NULL_TREE);
TREE_SIDE_EFFECTS (call) = 1;

View file

@ -321,6 +321,7 @@ enum java_tree_index
JTI_END_PARAMS_NODE,
JTI_THROW_NODE,
JTI_ALLOC_OBJECT_NODE,
JTI_SOFT_INSTANCEOF_NODE,
JTI_SOFT_CHECKCAST_NODE,
@ -544,6 +545,8 @@ extern tree java_global_trees[JTI_MAX];
java_global_trees[JTI_END_PARAMS_NODE]
/* References to internal libjava functions we use. */
#define throw_node \
java_global_trees[JTI_THROW_NODE]
#define alloc_object_node \
java_global_trees[JTI_ALLOC_OBJECT_NODE]
#define soft_instanceof_node \
@ -562,7 +565,6 @@ extern tree java_global_trees[JTI_MAX];
java_global_trees[JTI_SOFT_BADARRAYINDEX_NODE]
#define soft_nullpointer_node \
java_global_trees[JTI_SOFT_NULLPOINTER_NODE]
extern tree throw_node[];
#define soft_checkarraystore_node \
java_global_trees[JTI_SOFT_CHECKARRAYSTORE_NODE]
#define soft_monitorenter_node \

View file

@ -2513,8 +2513,7 @@ generate_bytecode_insns (exp, target, state)
}
else if (f == soft_monitorenter_node
|| f == soft_monitorexit_node
|| f == throw_node[0]
|| f == throw_node[1])
|| f == throw_node)
{
if (f == soft_monitorenter_node)
op = OPCODE_monitorenter;

View file

@ -669,13 +669,13 @@ typedef struct _jdeplist {
TREE_SIDE_EFFECTS (WHERE) = 1; \
}
#define BUILD_THROW(WHERE, WHAT) \
{ \
(WHERE) = \
build (CALL_EXPR, void_type_node, \
build_address_of (throw_node[USING_SJLJ_EXCEPTIONS ? 1 : 0]), \
build_tree_list (NULL_TREE, (WHAT)), NULL_TREE); \
TREE_SIDE_EFFECTS ((WHERE)) = 1; \
#define BUILD_THROW(WHERE, WHAT) \
{ \
(WHERE) = \
build (CALL_EXPR, void_type_node, \
build_address_of (throw_node), \
build_tree_list (NULL_TREE, (WHAT)), NULL_TREE); \
TREE_SIDE_EFFECTS ((WHERE)) = 1; \
}
/* Set wfl_operator for the most accurate error location */