Seen on Ubuntu Hardy using r139870. regehr@john-home:~/volatile/tmp21$ current-gcc -O2 small.c small.c: In function ‘func_26’: small.c:34: warning: overflow in implicit constant conversion small.c:27: internal compiler error: in set_value_range, at tree-vrp.c:397 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. regehr@john-home:~/volatile/tmp21$ 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 : (reconfigured) ../configure --program-prefix=current- --enable-languages=c,c++ --prefix=/home/regehr : (reconfigured) ../configure --program-prefix=current- --enable-languages=c,c++ --prefix=/home/regehr : (reconfigured) ../configure --program-prefix=current- --prefix=/home/regehr --enable-languages=c,c++ --no-create --no-recursion Thread model: posix gcc version 4.4.0 20080901 (experimental) (GCC) regehr@john-home:~/volatile/tmp21$ cat small.c typedef signed char int8_t; typedef short int int16_t; typedef int int32_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; static inline uint32_t safe_add_int8_t_s_s (int8_t si1, int16_t si2) { if ((si1) && (si2) && (si1 > (1 - si2)) || (si1) && (si2 < 0) && (si1 < (-128 - si2))) return si1; return si1 + si2; } uint32_t g_2; uint32_t g_113; uint32_t g_145; int32_t func_17 (int32_t p_18, uint32_t p_19, uint32_t p_21) { uint32_t l_23 = -1L; return l_23; } uint32_t func_26 (uint16_t p_27) { uint32_t l_424; if (func_93 (func_59 (safe_add_int8_t_s_s (p_27, 1))), func_124 (l_424, -7L, 1, g_145, 1, (safe_add_int8_t_s_s (1, 1)), 1), 1, 1, 1) func_117 (1, 1, (safe_add_uint64_t_u_u (1, (safe_add_int8_t_s_s (1, 0xCDF4BE7A1B7E4629LL)))), 1); uint32_t l_210; if (func_17 ((safe_add_int8_t_s_s (g_2, (0x6C79A83AL | func_17 (1, 1, 1)))), 0x4C9FL, 1)) { uint32_t l_212; if (safe_mul_int32_t_s_s ((1, 1, l_212, (1, (safe_add_int8_t_s_s (l_210, 1)), 1, 1)), 1)) if (func_59 (1, (safe_add_int8_t_s_s (g_113, 1)))) { } } }
I have a patch.
Fixed.
Subject: Bug 37327 Author: rguenth Date: Tue Sep 2 13:48:11 2008 New Revision: 139890 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139890 Log: 2008-09-02 Richard Guenther <rguenther@suse.de> PR tree-optimization/37327 * tree-vrp.c (register_new_assert_for): Make sure to not have TREE_OVERFLOW set on the bound. * gcc.c-torture/compile/pr37327.c: New testcase. Added: trunk/gcc/testsuite/gcc.c-torture/compile/pr37327.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-vrp.c