https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110228
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- That is these exports: 2->3 (T) c.5_7 : [irange] int [1334323000, +INF] NONZERO 0x7fffffff 2->3 (T) _8 : [irange] long unsigned int [1334323000, 2147483647] NONZERO 0x7fffffff 2->3 (T) b.6_9 : [irange] int [1334323000, +INF] NONZERO 0x7fffffff 2->3 (T) _10 : [irange] long unsigned int [1334323000, 2147483647] NONZERO 0x7fffffff 2->3 (T) _11 : [irange] long unsigned int [3481806647, 3481806649] NONZERO 0xcf88273f 2->3 (T) _12 : [irange] long unsigned int [0, 2] NONZERO 0x3 seems wrong. We originally had: c.5_7 = c; _8 = (long unsigned int) c.5_7; b.6_9 = b; _10 = (long unsigned int) b.6_9; _11 = _8 + _10; _12 = _11 + 18446744070227744969; if (_12 <= 2) so _11 export seems correct but _8 and _10 added together needs to be make _11. Since it is unsigned, the whole range for both numbers can make _11's range; that is we can't say anything about _8 or _10. Even if _11 is signed, I don't see how _8 and _10 could be described at all ... since _8 could be 0 and _10 could be 3481806647 and the range that is exported for _8 does not even include 0. Unless I am missing something obvious here.