The following foo.c which is a reduced case of libc/grp/initgroup.c causes an ICE:
foo.c:13: error: unable to find a register to spill in class 'R0_REGS' foo.c:13: error: this is the insn: (insn:HI 28 32 34 1 (set (reg:SI 147 t) (eq:SI (reg/v:SI 2 r2 [orig:161 result ] [161]) (const_int -1 [0xffffffffffffffff]))) 1 {cmpeqsi_t} (insn_list:REG_DEP_ANTI 23 (insn_list:REG_DEP_ANTI 24 (insn_list:REG_DEP_ANTI 25 (insn_list:REG_DEP_TRUE 26 (nil))))) (nil)) with -O2. foo.c: -- extern __thread int err __attribute__ ((tls_model ("initial-exec"))); int foo (int n, int *grp) { int result; do result = bar (n, grp); while (result == -1 && err == 22 && --n > 0); return result; } -- -- Summary: Variable with the initial-exec tls-model attribute causes spill failure Product: gcc Version: 4.0.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P2 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kkojima at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: sh4-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18447