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.