>From PR38572, but unrelated to it:
void f (long long int p)
{
int x;
static unsigned char g;
long long int min = -9223372036854775807LL - 1;
g = 1;
x = (signed char) (g | 249) / 4;
if (p >= min - (long long int) x)
p = 1;
if (p)
abort ();
}
gives
small.c: In function 'f':
small.c:3: internal compiler error: in set_value_range, at tree-vrp.c:398
Note that after FRE the code becomes the simpler
void f (long long int p)
{
long long int min = 9223372036854775807LL + 2; /*0x7fffffffffffffff */
if (min <= p)
p = 1;
if (p)
abort ();
}
but this does not ICE because in this testcase the "min <= p" is changed to "p
!= min - 1" by the first CCP pass, so this is also a missed folding in FRE.
I'm looking at the VRP failure though.
--
Summary: ICE in set_value_range, at tree-vrp.c:398
Product: gcc
Version: unknown
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bonzini at gnu dot org
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38932