Created attachment 24731 [details] Testcase to reproduce the issue When building drizzle on mips, g++ crash with an internal compiler error. The problem is reproducible with versions 4.4, 4.5 and 4.6, but not with version 4.3 (I didn't test earlier versions). I have attached a reduced testcase. $ g++ -c ./testcase-min.ii ./testcase-min.ii: In member function 'drizzled::internal::gcc_traits<T, D>::value_type drizzled::internal::gcc_traits<T, D>::fetch(const volatile value_type*) const volatile [with T = bool, D = bool, drizzled::internal::gcc_traits<T, D>::value_type = bool]': ./testcase-min.ii:12:5: error: unrecognizable insn: (insn 16 15 17 3 (parallel [ (set (reg:SI 205) (mem/v:SI (reg:SI 200) [-1 S4 A32])) (set (mem/v:SI (reg:SI 200) [-1 S4 A32]) (unspec_volatile:SI [ (reg:SI 203) (reg:SI 204) (plus:SI (reg:SI 205) (const_int 0 [0])) ] UNSPEC_SYNC_OLD_OP_12)) (clobber (scratch:SI)) ]) ./testcase-min.ii:11 -1 (nil)) ./testcase-min.ii:12:5: internal compiler error: in extract_insn, at recog.c:2109 Please submit a full bug report, with preprocessed source if appropriate.
Author: rsandifo Date: Sun Oct 2 17:45:10 2011 New Revision: 179431 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=179431 Log: gcc/ PR target/49696 * config/mips/sync.md (sync_<optab>_12): Allow zero operands. (sync_old_<optab>_12, sync_new_<optab>_12, sync_nand_12): Likewise. (sync_old_nand_12, sync_new_nand_12, test_and_set_12): Likewise. gcc/testsuite/ * gcc.dg/pr49696.c: New test. Added: trunk/gcc/testsuite/gcc.dg/pr49696.c Modified: trunk/gcc/ChangeLog trunk/gcc/config/mips/sync.md trunk/gcc/testsuite/ChangeLog
Patch applied to trunk. I don't think this is a regression, so it probably isn't suitable for the release branches.
I confirm the issue is fixed in trunk. Thanks!