------- Additional Comments From bjoern dot m dot haase at web dot de 2005-02-09 20:27 ------- The bug seems still to be present in head 4.0.0. The failing example could be stripped down a little bit further: // Begin of sample code unsigned long semaphore_create (unsigned long name, unsigned long count, unsigned long attribute_set, unsigned long *id ); struct termios { unsigned int c_iflag; unsigned int c_oflag; unsigned int c_cflag; unsigned int c_lflag; unsigned char c_cc[19]; }; typedef struct termios_callbacks { int (*firstOpen) (int major, int minor, void *arg); int (*lastClose) (int major, int minor, void *arg); int (*pollRead) (int minor); } termios_callbacks; void *calloc (unsigned int __nmemb, unsigned int __size); struct termios_rawbuf { char *theBuf; int Head; int Tail; int Size; int Semaphore; }; struct termios_tty { struct termios_tty *forw; struct termios_tty *back; unsigned long major; unsigned long minor; unsigned long isem; unsigned long osem; char *cbuf; int ccount; int cindex; int column; int read_start_column; struct termios termios; struct termios_rawbuf rawInBuf; struct termios_rawbuf rawOutBuf; termios_callbacks device; unsigned int flow_ctrl; unsigned int lowwater, highwater; unsigned int rxTaskId; unsigned int txTaskId; int tty_rcvwakeup; }; unsigned long termios_open (unsigned long major, unsigned long minor, struct termios_tty *tty, const termios_callbacks * callbacks) { unsigned long sc; { tty = calloc (1,0); if (tty == ((void *) 0)) return 0; tty->rawInBuf.Size = 128; tty->minor = minor; tty->major = major; sc = semaphore_create (0, 1, 0, 0 ); tty->device = *callbacks; tty->lowwater = tty->rawInBuf.Size * 1 / 2; } } // End of sample code
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18251