mike@APOLLO.COM (01/13/90)
The following routine will cause GCC(1.36) to seg fault when compiled with '-O'. struct csr { char x; unsigned int y : 1; } *csr; tst() { do { if (csr->x & 1) foo(); } while (csr->y); } on another note, here is a suggested bug fix for another problem : volatile struct x { int y : 24; } *z; main() { tst(z->y); } This causes the compiler to abort() ??? *** expmed.c.ORIG Tue Sep 12 15:46:21 1989 --- expmed.c Thu Nov 2 16:25:38 1989 *************** *** 708,714 **** /* If op0 is a register, we need it in SImode to make it acceptable to the format of extzv. */ if (GET_CODE (xop0) == SUBREG && GET_MODE (xop0) != SImode) ! abort (); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != SImode) xop0 = gen_rtx (SUBREG, SImode, xop0, 0); --- 708,714 ---- /* If op0 is a register, we need it in SImode to make it acceptable to the format of extzv. */ if (GET_CODE (xop0) == SUBREG && GET_MODE (xop0) != SImode) ! xop0 = convert_to_mode (SImode, xop0, 1); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != SImode) xop0 = gen_rtx (SUBREG, SImode, xop0, 0); *************** *** 818,824 **** /* If op0 is a register, we need it in SImode to make it acceptable to the format of extv. */ if (GET_CODE (xop0) == SUBREG && GET_MODE (xop0) != SImode) ! abort (); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != SImode) xop0 = gen_rtx (SUBREG, SImode, xop0, 0); --- 818,824 ---- /* If op0 is a register, we need it in SImode to make it acceptable to the format of extv. */ if (GET_CODE (xop0) == SUBREG && GET_MODE (xop0) != SImode) ! xop0 = convert_to_mode (SImode, xop0, 0); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != SImode) xop0 = gen_rtx (SUBREG, SImode, xop0, 0); ------- Kudos to Rob Stanzel (rps@apollo.hp.com) for this one. Mike Schloss mike@apollo.hp.com 508-256-6600 x-6751