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.

Reply via email to