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