middle-end/3212
Peter Schmid
schmid@snake.iap.physik.tu-darmstadt.de
Sun Jun 17 16:18:00 GMT 2001
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
More information about the Gcc-bugs
mailing list