https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65693
--- Comment #5 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Well, this testcase only ICEs with gcc-5: markus@x4 tmp % < foo.ii int a, b; unsigned c; static void invoke_copy_to_stack (unsigned long *p1, int, int) { for (; b;) if (a) *p1 = 0; } void VBoxNsxpXPTC_InvokeByIndex () { unsigned long *d = (unsigned long *) __builtin_alloca (c); invoke_copy_to_stack (d, 0, 0); register int e asm("rdx") = ((int (*) (int, int, int, int, int, int)) 0)(0, 0, e, 0, 0, 0); } markus@x4 tmp % g++ -O -c foo.ii foo.ii: In function ‘void VBoxNsxpXPTC_InvokeByIndex()’: foo.ii:18:1: error: unable to find a register to spill } ^ foo.ii:18:1: error: this is the insn: (insn 9 8 10 2 (parallel [ (set (reg:DI 98) (udiv:DI (reg:DI 96) (reg:DI 106))) (set (reg:DI 109 [99]) (umod:DI (reg:DI 96) (reg:DI 106))) (clobber (reg:CC 17 flags)) ]) foo.ii:14 352 {*udivmoddi4} (expr_list:REG_UNUSED (reg:DI 109 [99]) (expr_list:REG_DEAD (reg:DI 106) (expr_list:REG_DEAD (reg:DI 96) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))))) foo.ii:18: confused by earlier errors, bailing out