https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329

--- Comment #3 from Andrew Macleod <amacleod at redhat dot com> ---
Just to bookmark where the analysis is since im out for a few days, in the
restrict pass, with ranger tracing on, the code sequence is:


  <bb 15> [local count: 14831835]:
  __nleft_49 = (const size_type) _48;
  __builtin_memcpy (_22, "5", __nleft_49);

and the ranger trace from wrestrict shows:
             TRUE : (5628) range_of_expr (_48) long int [-INF, 0][2, +INF]
           TRUE : (5617) range_of_stmt (__nleft_49) const size_type [2,
9223372036854775807]

So we know _48 is non-zero, and when I further delve into things, ranger is
calculating __nleft_49 correct as  [0, 0][2, +INF], but when it merges this
with the current known global range, THAT has been set somewhere as [2,
9223372036854775807] 

Im trying to find where the global value is first set. when I put a breakpoint
in the set and get routines, the very first thing that triggers is:

#0  gimple_range_global (name=0x7fffefd0be10) at
/opt/notnfs/amacleod/master/gcc/gcc/value-query.cc:419
#1  0x0000000002e73534 in ranger_cache::get_global_range (this=0x41797b8,
r=..., name=0x7fffefd0be10) at
/opt/notnfs/amacleod/master/gcc/gcc/gimple-range-cache.cc:925
#2  0x0000000002e73580 in ranger_cache::get_global_range (this=0x41797b8,
r=..., name=0x7fffefd0be10, current_p=@0x7fffffff9c37: false) at
/opt/notnfs/amacleod/master/gcc/gcc/gimple-range-cache.cc:939
#3  0x0000000002e6f731 in gimple_ranger::range_of_stmt (this=0x4179790, r=...,
s=0x7fffef265000, name=0x7fffefd0be10) at
/opt/notnfs/amacleod/master/gcc/gcc/gimple-range.cc:307
#4  0x0000000002e6edc2 in gimple_ranger::range_on_entry (this=0x4179790, r=...,
bb=0x7fffeecc4340, name=0x7fffefd0be10) at
/opt/notnfs/amacleod/master/gcc/gcc/gimple-range.cc:151
#5  0x0000000002e6ec40 in gimple_ranger::range_of_expr (this=0x4179790, r=...,
expr=0x7fffefd0be10, stmt=0x7fffeeca8f78) at
/opt/notnfs/amacleod/master/gcc/gcc/gimple-range.cc:128
#6  0x0000000001b4cd0d in get_range (val=0x7fffefd0be10, stmt=0x7fffeeca8f78,
minmax=0x7fffffffbe10, rvals=0x4179790) at
/opt/notnfs/amacleod/master/gcc/gcc/tree-ssa-strlen.cc:219
#7  0x00000000016f8fae in get_offset_range (x=0x7fffefd0be10,
stmt=0x7fffeeca8f78, r=0x7fffffffc0b0, rvals=0x4179790) at
/opt/notnfs/amacleod/master/gcc/gcc/pointer-query.cc:92
#8  0x0000000001702c2f in handle_ssa_name (ptr=0x7fffef8d20d8, addr=false,
ostype=0, pref=0x7fffffffc5d0, snlim=..., qry=0x4167468) at
/opt/notnfs/amacleod/master/gcc/gcc/pointer-query.cc:2157
#9  0x000000000170375b in compute_objsize_r (ptr=0x7fffef8d20d8,
stmt=0x7fffeeca8f78, addr=false, ostype=0, pref=0x7fffffffc5d0, snlim=...,
qry=0x4167468)
    at /opt/notnfs/amacleod/master/gcc/gcc/pointer-query.cc:2321
#10 0x0000000001703907 in compute_objsize (ptr=0x7fffef8d20d8,
stmt=0x7fffeeca8f78, ostype=0, pref=0x7fffffffc5d0, ptr_qry=0x4167468) at
/opt/notnfs/amacleod/master/gcc/gcc/pointer-query.cc:2355
#11 0x00000000016ff4e4 in pointer_query::get_ref (this=0x4167468,
ptr=0x7fffef8d20d8, stmt=0x7fffeeca8f78, pref=0x7fffffffc5d0, ostype=0) at
/opt/notnfs/amacleod/master/gcc/gcc/pointer-query.cc:1505
#12 0x00000000013b99c3 in (anonymous
namespace)::pass_waccess::check_dangling_stores (this=0x4167410,
bb=0x7fffeecc4340, stores=..., bbs=...)
    at /opt/notnfs/amacleod/master/gcc/gcc/gimple-ssa-warn-access.cc:4528

with
p vr.dump(stderr)
const size_type [1, 9223372036854775807]

I also have a breakpoint in set_range_info for this name which hasn't been
triggered.   So either the set routine have been bypassed or perhaps inlining
is setting this global value?

Im still trying to figure out who and where has decided that __nleft_49 is [2,
0x7FFFFFFFFFFFFFFF] instead of [2, 0xFFFFFFFFFFFFFFFFFFFF]

Reply via email to