Bug 37327 - [4.4 Regression] another ice in set_value_range, at tree-vrp.c:397
Summary: [4.4 Regression] another ice in set_value_range, at tree-vrp.c:397
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.4.0
: P3 normal
Target Milestone: 4.4.0
Assignee: Richard Biener
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2008-09-02 03:36 UTC by John Regehr
Modified: 2008-09-02 13:48 UTC (History)
1 user (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Known to work: 4.3.2
Known to fail:
Last reconfirmed: 2008-09-02 11:53:28


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John Regehr 2008-09-02 03:36:14 UTC
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))))
	  {
	  }
    }
}
Comment 1 Richard Biener 2008-09-02 11:53:28 UTC
I have a patch.
Comment 2 Richard Biener 2008-09-02 13:48:24 UTC
Fixed.
Comment 3 Richard Biener 2008-09-02 13:49:39 UTC
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