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
This commit is contained in:
Tom Tromey 2002-12-20 19:25:46 +00:00 committed by Tom Tromey
parent 8056c5f221
commit 913746e328
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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));