The attached program causes spill failure on latest 4.5 branch with -mthumb
it fails when no -O<n> is used and works when -Os/-O2 is used but fails again when -fno-omit-frame-pointer is passed in addition to -Os or -O2 arm-oe-linux-uclibceabi-gcc -mthumb -Os -fno-omit-frame-pointer recvfrom.i recvfrom.i: In function '__libc_recvfrom': recvfrom.i:5:9: error: unable to find a register to spill in class 'LO_REGS' recvfrom.i:5:9: error: this is the insn: (insn 73 19 74 2 recvfrom.i:5 (set (reg:SI 12 ip [150]) (const_int 146 [0x92])) 167 {*thumb1_movsi_insn} (expr_list:REG_EQUAL (const_int 146 [0x92]) (nil))) recvfrom.i:5: confused by earlier errors, bailing out here is the test case extern __thread int __libc_errno __attribute__ ((tls_model ("initial-exec"))); int __libc_recvfrom( int sockfd, void * buffer, int len, int flags, void * to, void * tolen) { return (int)({ unsigned int _inline_sys_result = ({ unsigned int _internal_sys_result; { int _sys_buf[2]; register int _a1 __asm__ ("a1"); register int *_v3 __asm__ ("v3") = _sys_buf; int _v2tmp = (int) (tolen); int _v1tmp = (int) (to); int _a4tmp = (int) (flags); int _a3tmp = (int) (len); int _a2tmp = (int) (buffer); int _a1tmp = (int) (sockfd); _a1 = _a1tmp; register int _a2 __asm__ ("a2") = _a2tmp; register int _a3 __asm__ ("a3") = _a3tmp; register int _a4 __asm__ ("a4") = _a4tmp; register int _v1 __asm__ ("v1") = _v1tmp; register int _v2 __asm__ ("v2") = _v2tmp; *_v3 = (int) (((0 +292))); __asm__ __volatile__ ("str r7, [v3, #4]\n" "\tldr r7, [v3]\n" "\tswi 0 @ syscall " "SYS_ify(__libc_recvfrom)" "\n" "\tldr r7, [v3, #4]" : "=r" (_a1) : "r" (_v3) , "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), "r" (_v1), "r" (_v2) : "memory"); _internal_sys_result = _a1; } (int) _internal_sys_result; }); if (__builtin_expect (((unsigned int) (_inline_sys_result) >= 0xfffff001u), 0)) { (__libc_errno = ((-(_inline_sys_result)))); _inline_sys_result = (unsigned int) -1; } (int) _inline_sys_result; }); } -- Summary: Thumb ICE due to spill failure Product: gcc Version: 4.5.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: raj dot khem at gmail dot com GCC build triplet: x86_64-linux GCC host triplet: x86_64-linux GCC target triplet: arm-oe-linux-uclibceabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44860