java/8955: switch case statement causes gcj to throw segmentation fault

Tom Tromey tromey@redhat.com
Wed Dec 18 17:36:00 GMT 2002


The following reply was made to PR java/8955; it has been noted by GNATS.

From: Tom Tromey <tromey@redhat.com>
To: bhun@chello.nl
Cc: gcc-gnats@gcc.gnu.org, Gary Benson <gbenson@redhat.com>
Subject: Re: java/8955: switch case statement causes gcj to throw segmentation fault
Date: 18 Dec 2002 18:34:49 -0700

 >>>>> ">" == Dhek Bhun Kho <bhun@chello.nl> writes:
 
 >> Number:         8955
 >> Synopsis:       switch case statement causes gcj to throw segmentation fault
 
 Could you try the appended patch?
 
 gcj 3.3 crashed on Gary's reduced test case.  The appended patch fixes
 that.
 
 Tom
 
 Index: ChangeLog
 from  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.
 
 Index: jcf-write.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v
 retrieving revision 1.111
 diff -u -r1.111 jcf-write.c
 --- jcf-write.c 16 Dec 2002 18:22:35 -0000 1.111
 +++ jcf-write.c 19 Dec 2002 01:29:59 -0000
 @@ -1746,6 +1746,7 @@
  	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 @@
  		   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));



More information about the Gcc-prs mailing list