This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: CVS head build breakage for target sh-elf
- From: Hans-Peter Nilsson <hp at bitrange dot com>
- To: Graham Stott <graham dot stott at btinternet dot com>
- Cc: Jason Merrill <jason at redhat dot com>, tm <tm at mail dot kloo dot net>, <gcc-bugs at gcc dot gnu dot org>, Mark Mitchell <mark at codesourcery dot com>
- Date: Wed, 7 Aug 2002 09:20:20 -0400 (EDT)
- Subject: 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