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.