Commit 913746e3 by Tom Tromey Committed by Tom Tromey

re PR java/8955 (switch case statement causes gcj to throw segmentation fault)

	* jcf-write.c (generate_bytecode_insns) [SWITCH_EXPR]: Handle case
	where minimum case value is Integer.MIN_VALUE.
	Fixes PR java/8955.

From-SVN: r60372
parent 8056c5f2
2002-12-20 Tom Tromey <tromey@redhat.com>
* jcf-write.c (generate_bytecode_insns) [SWITCH_EXPR]: Handle case
where minimum case value is Integer.MIN_VALUE.
Fixes PR java/8955.
2002-12-18 Andrew Haley <aph@redhat.com>
* parse.y (patch_invoke): Force evaluation order when `check' is
......
......@@ -1746,6 +1746,7 @@ generate_bytecode_insns (exp, target, state)
else
{
HOST_WIDE_INT i;
unsigned HOST_WIDE_INT delta;
/* Copy the chain of relocs into a sorted array. */
struct jcf_relocation **relocs = (struct jcf_relocation **)
xmalloc (sw_state.num_cases * sizeof (struct jcf_relocation *));
......@@ -1778,8 +1779,11 @@ generate_bytecode_insns (exp, target, state)
handled by the parser. */
}
if (2 * sw_state.num_cases
>= sw_state.max_case - sw_state.min_case)
/* We could have DELTA < 0 if sw_state.min_case is
something like Integer.MIN_VALUE. That is why delta is
unsigned. */
delta = sw_state.max_case - sw_state.min_case;
if (2 * sw_state.num_cases >= delta)
{ /* Use tableswitch. */
int index = 0;
RESERVE (13 + 4 * (sw_state.max_case - sw_state.min_case + 1));
......
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