egcs-current: toplev.c:1152: Internal compiler error in function fatal_insn
Matthias Urlichs
smurf@noris.de
Thu May 21 19:12:00 GMT 1998
This happened compiling Linux 2.0.34pre15.
#################
gcc -v -O2 sig.c
#################
Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.91.29/specs
gcc version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental)
/usr/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.91.29/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__OPTIMIZE__ -Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386) -D__pentium__ -D__i586__ -D__i386__ -Asystem(unix) -Acpu(i386) -Amachine(i386) -D__pentium__ -D__i586__ sig.c /tmp/ccfMp3R7.i
GNU CPP version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/i586-pc-linux-gnu/include
/usr/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.91.29/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.91.29/cc1 /tmp/ccfMp3R7.i -quiet -dumpbase sig.c -O2 -version -o /tmp/ccfMp3R7.s
GNU C version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental) (i586-pc-linux-gnu) compiled by GNU C version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental).
sig.c: In function `dequeue_signal':
sig.c:51: internal error--unrecognizable insn:
(insn 139 28 32 (set (reg 52)
(reg/v:SI 33)) -1 (insn_list 28 (nil))
(nil))
toplev.c:1152: Internal compiler error in function fatal_insn
#################
typedef struct {
unsigned long sig[(64 / 32 ) ];
} sigset_t;
struct signal_queue {
struct signal_queue *next;
};
struct signal_struct {
};
struct task_struct {
int sigpending;
struct signal_struct *sig;
sigset_t signal, blocked;
struct signal_queue *sigqueue, **sigqueue_tail;
};
static inline struct task_struct * get_current(void)
{
struct task_struct *current;
__asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
return current;
}
static inline void recalc_sigpending (struct task_struct *t)
{
unsigned long ready;
long i;
for (i = (64 / 32 ) , ready = 0; --i >= 0 ;)
ready |= t->signal.sig[i] &~ t->blocked.sig[i];
t->sigpending = (ready != 0);
}
int dequeue_signal()
{
unsigned long i, *s, *m, x;
int sig = 0;
if ((x = s[0] &~ m[0]) != 0) {
{
struct signal_queue *q, **pp;
pp = & get_current() ->sigqueue;
q = get_current() ->sigqueue;
if (q) {
if ((*pp = q->next) == ((void *) 0) )
get_current() ->sigqueue_tail = pp;
}
}
recalc_sigpending (get_current() );
}
}
#################
--
Matthias Urlichs
noris network GmbH
More information about the Gcc-bugs
mailing list