This is seen using r142142 on Ubuntu Hardy on x86. I don't think anything in the source code justifies the segfault.
[EMAIL PROTECTED]:~/volatile/tmp66$ current-gcc -O2 small.c -o small [EMAIL PROTECTED]:~/volatile/tmp66$ ./small Segmentation fault [EMAIL PROTECTED]:~/volatile/tmp66$ current-gcc -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --program-prefix=current- --enable-languages=c,c++ --prefix=/home/regehr : (reconfigured) ../configure --program-prefix=current- --enable-languages=c,c++ --prefix=/home/regehr Thread model: posix gcc version 4.4.0 20081123 (experimental) (GCC) [EMAIL PROTECTED]:~/volatile/tmp66$ cat small.c #include <stdint.h> #include <limits.h> static inline int8_t safe_sub_int8_t_s_s (int8_t si1, int8_t si2) { if (((si1^si2) & (((si1 ^ ((si1^si2) & (1 << (sizeof(int8_t)*CHAR_BIT-1))))-si2)^si2)) < 0) { return si1; } return si1 - si2; } static inline int32_t safe_div_int32_t_s_s (int32_t si1, int32_t si2) { if ((si2 == 0) || ((si1 == INT_MIN) && (si2 == -1))) { return si1; } return si1 / si2; } static inline uint64_t safe_mod_uint64_t_u_u (uint64_t ui1, uint64_t ui2) { if (ui2 == 0) return ui1; return ui1 % ui2; } uint8_t g_2; volatile uint32_t g_9; int32_t func_3 (void); int32_t func_3 (void) { return g_2; } void func_1 (void); void func_1 (void) { uint32_t l_10 = 0x084BL; if (safe_sub_int8_t_s_s ((safe_div_int32_t_s_s (0, (safe_mod_uint64_t_u_u (func_3 (), l_10)))), 1)) { } else if (g_9) { } } int main (void) { func_1 (); return 0; } -- Summary: apparent improper segfault in compiler output Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: regehr at cs dot utah dot edu GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38245