re PR java/5812 (GCJ 3.0.2 segfaults on class file from Sun JDK 1.3 compiler)

Fix for PR java/5812.
	* expr.c (build_java_jsr):  Take pc arguments, and do lookup_label
	gere instead of in JSR macro.  Likewise with load_type_state call.
	Do the latter on if the return_pc has been verified (the jsr returns).
	(JSR):  No just call build_java_jsr.

From-SVN: r50455
This commit is contained in:
Per Bothner 2002-03-08 12:59:52 -08:00 committed by Per Bothner
parent c51d95ecef
commit 5295f849ca
2 changed files with 17 additions and 11 deletions

View File

@ -1,3 +1,11 @@
2002-03-08 Per Bothner <per@bothner.com>
Fix for PR java/5812.
* expr.c (build_java_jsr): Take pc arguments, and do lookup_label
gere instead of in JSR macro. Likewise with load_type_state call.
Do the latter on if the return_pc has been verified (the jsr returns).
(JSR): No just call build_java_jsr.
2002-03-07 Jeff Sturm <jsturm@one-point.com>
* java/Make-lang.in (JAVA_TARGET_INSTALL_NAME): Define.

View File

@ -48,7 +48,7 @@ static tree pop_value PARAMS ((tree));
static void java_stack_swap PARAMS ((void));
static void java_stack_dup PARAMS ((int, int));
static void build_java_athrow PARAMS ((tree));
static void build_java_jsr PARAMS ((tree, tree));
static void build_java_jsr PARAMS ((int, int));
static void build_java_ret PARAMS ((tree));
static void expand_java_multianewarray PARAMS ((tree, int));
static void expand_java_arraystore PARAMS ((tree));
@ -607,15 +607,18 @@ build_java_athrow (node)
/* Implementation for jsr/ret */
static void
build_java_jsr (where, ret)
tree where;
tree ret;
build_java_jsr (target_pc, return_pc)
int target_pc, return_pc;
{
tree where = lookup_label (target_pc);
tree ret = lookup_label (return_pc);
tree ret_label = fold (build1 (ADDR_EXPR, return_address_type_node, ret));
push_value (ret_label);
flush_quick_stack ();
emit_jump (label_rtx (where));
expand_label (ret);
if (instruction_bits [return_pc] & BCODE_VERIFIED)
load_type_state (ret);
}
static void
@ -2968,13 +2971,8 @@ process_jvm_instruction (PC, byte_ops, length)
build_java_ret (find_local_variable (index, ptr_type_node, oldpc)); \
}
#define JSR(OPERAND_TYPE, OPERAND_VALUE) \
{ \
tree where = lookup_label (oldpc+OPERAND_VALUE); \
tree ret = lookup_label (PC); \
build_java_jsr (where, ret); \
load_type_state (ret); \
}
#define JSR(OPERAND_TYPE, OPERAND_VALUE) \
build_java_jsr (oldpc+OPERAND_VALUE, PC);
/* Push a constant onto the stack. */
#define PUSHC(OPERAND_TYPE, OPERAND_VALUE) \