The problem is that expansion can use const0_rtx as an indicator that we are 
not interested in the value.  This is an invalid as a target of a move, so, we 
must always have a valid target.  This dummies up a target, just like in the 
NULL_RTX case.

Ok?

diff --git a/gcc/optabs.c b/gcc/optabs.c
index 353727f..a091deb 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -7174,6 +7174,8 @@ expand_atomic_test_and_set (rtx target, rtx mem, enum 
memmodel model)
     {
       trueval = const1_rtx;
       subtarget = target ? target : gen_reg_rtx (mode);
+      if (subtarget == const0_rtx)
+       subtarget = gen_reg_rtx (mode);
     }
   else
     {

Reply via email to