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:
parent
8056c5f221
commit
913746e328
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue