https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87059
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at gcc dot gnu.org --- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- Confirmed on a stage1 compiler natively. Breakpoint 2, extract_range_from_binary_expr_1 (vr=0x3fffffffb1f0, code=MIN_EXPR, expr_type=0x3fffaf1a0150, vr0_=0x3fffffffb138, vr1_=0x3fffffffb118) at /home/aldyh/src/gcc/gcc/tree-vrp.c:1600 (gdb) p vr0.dump() [1, +INF] $78 = void (gdb) p debug_generic_stmt(vr0.max) 18446744073709551615 $80 = void (gdb) p/x 18446744073709551615 $82 = 0xffffffffffffffff (gdb) p sign $81 = SIGNED It looks like extract_range_from_binary_expr_1 is being passed a nonsensical range. VR0 is suppsed to be SIGNED, but yet the range is: [1, 0xffffffffffffffff] If the range should be really [1, +INF], I would've expected it to be [1, 0x7ffffff...] Obviously MIN/MAX handling in VRP will get confused by this ;-). I'll investigate.