http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60336
--- Comment #8 from H.J. Lu <hjl.tools at gmail dot com> --- This works: diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 00773d8..16669b9 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -7193,6 +7193,7 @@ function_arg_advance_64 (CUMULATIVE_ARGS *cum, enum machine_mode mode, return; if (examine_argument (mode, type, 0, &int_nregs, &sse_nregs) + && (sse_nregs || int_nregs) && sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs) { cum->nregs -= int_nregs;