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