In get_builtin_sync_mem, mem->u.fld.rt_rtx.code is REG in 4.5.0, SUBREG earlier. So then compare that function and notice convert_memory_address added in 4.5.0 and then: The same problem hit 32bit IA64/HP-UX (-milp32) bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41801 fix: http://gcc.gnu.org/viewcvs/trunk/gcc/builtins.c?r1=153488&r2=153669&diff_format=h jbook2:gcc jay$ diff -U5 builtins.c.orig builtins.c --- builtins.c.orig 2010-04-25 09:55:44.000000000 -0700 +++ builtins.c 2010-04-25 09:55:58.000000000 -0700 @@ -6003,11 +6003,12 @@ static rtx get_builtin_sync_mem (tree loc, enum machine_mode mode) { rtx addr, mem; - addr = expand_expr (loc, NULL_RTX, Pmode, EXPAND_SUM); + addr = expand_expr (loc, NULL_RTX, ptr_mode, EXPAND_SUM); + addr = convert_memory_address (Pmode, addr); - Jay ---------------------------------------- > From: lopezibanez@xxxxxxxxx > Date: Sun, 25 Apr 2010 17:28:10 +0200 > Subject: Re: alpha-dec-vms __sync_lock_test_and_set char/short -O2 fails on all 4.3.x and 4.4.x > To: jay.krell@xxxxxxxxxxx > CC: gcc-help@xxxxxxxxxxx > > On 25 April 2010 17:22, Jay K wrote: >> >> For the archives: > > A better place would be http://gcc.gnu.org/bugzilla/ > > Cheers, > > Manuel.