Here is a reduced test case te.c which triggers the problem: Source code te.c, stripped down from events.c. typedef struct event_s { int type; int code; int dx, dy; int x, y; } event_t; #define MAX_EVENTS 32 static event_t eventqueue[MAX_EVENTS]; static int eventhead, eventpos; int ev_postevent(event_t *ev) { int nextevent; nextevent = (eventhead+1)%MAX_EVENTS; if (nextevent == eventpos) return 0; eventqueue[eventhead] = *ev; eventhead = nextevent; return 1; } Compiling te.c gcc -v -O -c te.c -fschedule-insns -save-temps Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc Thread model: posix gcc version 3.0 20010615 (prerelease) /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/cpp0 -lang-c -v -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ te.c te.i GNU CPP version 3.0 20010615 (prerelease) (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/include /usr/include End of search list. /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1 -fpreprocessed te.i -quiet -dumpbase te.c -O -version -fschedule-insns -o te.s GNU CPP version 3.0 20010615 (prerelease) (cpplib) (i386 Linux/ELF) GNU C version 3.0 20010615 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 3.0 20010615 (prerelease). te.c: In function `ev_postevent': te.c:25: Unable to find a register to spill in class `AREG'. te.c:25: This is the insn: (insn 4 38 13 (set (reg/v/f:SI 42) (mem/f:SI (reg/f:SI 16 argp) 0)) 35 {*movsi_1} (nil) (expr_list:REG_EQUIV (mem/f:SI (reg/f:SI 16 argp) 0) (nil))) te.c:25: confused by earlier errors, bailing out Preprocessed source te.i # 2 "te.c" typedef struct event_s { int type; int code; int dx, dy; int x, y; } event_t; static event_t eventqueue[32]; static int eventhead, eventpos; int ev_postevent(event_t *ev) { int nextevent; nextevent = (eventhead+1)%32; if (nextevent == eventpos) return 0; eventqueue[eventhead] = *ev; eventhead = nextevent; return 1; } Hope this helps, Peter Schmid