I am getting a very strange ICE on a mips system when building with -mabi=n32 or -mabi=64:
testcase.i: In function ‘_IO_vfscanf_internal’: testcase.i:2857: error: unable to find a register to spill in class ‘V1_REG’ testcase.i:2857: error: this is the insn: (insn 1286 1241 1243 106 testcase.i:577 (set (reg:SI 19 $19 [3464]) (unspec:SI [ (const_int 0 [0x0]) ] 28)) 460 {tls_get_tp_si} (expr_list:REG_EQUIV (unspec:SI [ (const_int 0 [0x0]) ] 28) (nil))) testcase.i:2857: confused by earlier errors, bailing out This is when trying to build glibc 2.7, file vfscanf.c. The strange part appear when trying to reduce the testcase. I noticed that removing struct declarations that are not use elsewhere in the file make the problem disappear. That's why the reduced testcase is still big. I'll attach two testcase, one unreduced, and one reduced. With the unreduced testcase, it is possible to trigger the bug with -mabi=n32 or -mabi=64 with -O2 or -O3. On reduce testcase, the bug is triggered exclusively with -mabi=n32 and -O2. This is the command I used to build the file: /usr/bin/gcc-4.3 -c -O2 -fgnu89-inline -std=gnu99 -mabi=n32 testcase-min.i -- Summary: MIPS64: Unable to find a register to spill in class ‘V1_REG’ Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: aurelien at aurel32 dot net GCC build triplet: mips64el-unknown-linux-gnu GCC host triplet: mips64el-unknown-linux-gnu GCC target triplet: mips64el-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35802