g++.mike/net16.C

Richard Henderson rth@cygnus.com
Thu Nov 4 16:39:00 GMT 1999


On Wed, Nov 03, 1999 at 01:24:22PM -0800, Mark Mitchell wrote:
> It looks like this is still failing, even after this patch:
> 
>         * reg-stack.c (convert_regs_1): Handle EH edges specially.

Blah.  I made it work with optimization, but thinko'd the -O0 case.


r~

        * reg-stack.c (convert_regs_1): Initialize target_stack->top
        after verifying an EH edge.

Index: reg-stack.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/reg-stack.c,v
retrieving revision 1.46
diff -c -p -d -r1.46 reg-stack.c
*** reg-stack.c	1999/11/05 00:35:10	1.46
--- reg-stack.c	1999/11/05 00:36:04
*************** convert_regs_1 (file, block)
*** 2546,2560 ****
  	  HARD_REG_SET tmp;
  
  	  CLEAR_HARD_REG_SET (tmp);
! 	  GO_IF_HARD_REG_EQUAL (BLOCK_INFO (e->dest)->stack_in.reg_set,
! 				tmp, eh1);
  	  abort();
  	eh1:
  
  	  SET_HARD_REG_BIT (tmp, FIRST_STACK_REG);
! 	  GO_IF_HARD_REG_EQUAL (BLOCK_INFO (e->src)->out_reg_set, tmp, eh2);
  	  abort();
! 	eh2:;
  	}
  
        /* It is better to output directly to the end of the block
--- 2546,2561 ----
  	  HARD_REG_SET tmp;
  
  	  CLEAR_HARD_REG_SET (tmp);
! 	  GO_IF_HARD_REG_EQUAL (target_stack->reg_set, tmp, eh1);
  	  abort();
  	eh1:
  
  	  SET_HARD_REG_BIT (tmp, FIRST_STACK_REG);
! 	  GO_IF_HARD_REG_EQUAL (regstack.reg_set, tmp, eh2);
  	  abort();
! 	eh2:
! 
! 	  target_stack->top = -1;
  	}
  
        /* It is better to output directly to the end of the block


More information about the Gcc-bugs mailing list