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

--- Comment #9 from Andrew Macleod <amacleod at redhat dot com> ---
Working on it.

Looks like an 8 bit value somehow got considered as a 32 bit partial
equivalence.

  _8 = -_7;
  _9 = (int) _8;
  h_30 = (char) _9;

<..>

h_30 is an 8 bit slice of _9, yet :

This is ok:
Checking Partial equiv ( pe32 ) _8
CACHE: BB 11 DOM query for _8, found [irange] unsigned int [1, +INF] NONZERO
0xfffffffa at BB10
CACHE: Range for DOM returns : [irange] unsigned int [1, +INF] NONZERO
0xfffffffa

but this is not:

Checking Partial equiv ( pe32 ) h_30
CACHE: BB 11 DOM query for h_30, found [irange] char VARYING at BB10
CACHE: Range for DOM returns : [irange] char VARYING
Partial equiv update! :  h_30 has range  :  [irange] int [-128, 127] refining
range to :[irange] int [-128, -1][1, 127] NONZERO 0xfffffffa

That changed the value of _9 in an incorrect way. h_30 is a char, that should
be pe8, and as that is smaller than the 32 bits in _9, that value should have
been rejected. 

THis is occurring during the path_ranger used by threading, still working on
figuring where the root issue lies.

Reply via email to