This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: CVS head build breakage for target sh-elf


On Wed, 7 Aug 2002, Graham Stott wrote:
> Jason,
>
> I still get an abort compiling libstdc++-v3/src/locale-inst.cc on sh-elf target
> on a tree with your patch.

This patch is what I'm testing locally.  It lets me build
libgcc, newlib, libstdc++-v3 on mmix-knuth-mmixware.  Can't
really test it thoroughly (i.e. bootstrap and test for other
targets than mmix-knuth-mmixware) until next week.  Will report
on testsuite results soon.

	* expr.c (store_expr): In condition for checking if value is
	generated in TARGET, move call to expr_size last.

Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.476
diff -p -c -r1.476 expr.c
*** expr.c	4 Aug 2002 22:45:18 -0000	1.476
--- expr.c	7 Aug 2002 12:16:59 -0000
*************** store_expr (exp, target, want_value)
*** 4238,4251 ****
         || (temp != target && (side_effects_p (temp)
  			      || side_effects_p (target))))
        && TREE_CODE (exp) != ERROR_MARK
-       /* If there's nothing to copy, don't bother.  */
-       && expr_size (exp) != const0_rtx
        && ! dont_store_target
  	 /* If store_expr stores a DECL whose DECL_RTL(exp) == TARGET,
  	    but TARGET is not valid memory reference, TEMP will differ
  	    from TARGET although it is really the same location.  */
        && (TREE_CODE_CLASS (TREE_CODE (exp)) != 'd'
! 	  || target != DECL_RTL_IF_SET (exp)))
      {
        target = protect_from_queue (target, 1);
        if (GET_MODE (temp) != GET_MODE (target)
--- 4238,4254 ----
         || (temp != target && (side_effects_p (temp)
  			      || side_effects_p (target))))
        && TREE_CODE (exp) != ERROR_MARK
        && ! dont_store_target
  	 /* If store_expr stores a DECL whose DECL_RTL(exp) == TARGET,
  	    but TARGET is not valid memory reference, TEMP will differ
  	    from TARGET although it is really the same location.  */
        && (TREE_CODE_CLASS (TREE_CODE (exp)) != 'd'
! 	  || target != DECL_RTL_IF_SET (exp))
!       /* If there's nothing to copy, don't bother.  Don't call expr_size
! 	 unless necessary, because some front-ends (C++) expr_size-hook
! 	 aborts on objects that are not supposed to be bit-copied or
! 	 bit-initialized.  */
!       && expr_size (exp) != const0_rtx)
      {
        target = protect_from_queue (target, 1);
        if (GET_MODE (temp) != GET_MODE (target)

brgds, H-P


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]