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

--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
These are all of the various:
  __analyzer_eval (q[-2].x == 107024); /* { dg-warning "TRUE" } */
  __analyzer_eval (q[-2].y == 107025); /* { dg-warning "TRUE" } */
emitting UNKNOWN instead.


The -m32 gimple has:

  _55 = q_92 + 4294967280;
  _56 = _55->x;
  _57 = _56 == 107024;
  _58 = (int) _57;
  __analyzer_eval (_58);

whereas the -m64 gimple has:

  _55 = q_92 + 18446744073709551600;
  _56 = _55->x;
  _57 = _56 == 107024;
  _58 = (int) _57;
  __analyzer_eval (_58);

Looks like somewhere below region_model::convert_byte_offset_to_array_index the
64-bit case reconstructs -2, whereas the 32-bit case doesn't.

Reply via email to