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

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amacleod at redhat dot com

--- Comment #2 from Andrew Macleod <amacleod at redhat dot com> ---
Its trapoping on
 irange::irange_intersect (const irange &r)
{
  gcc_checking_assert (!legacy_mode_p () && !r.legacy_mode_p ());
  gcc_checking_assert (undefined_p () || r.undefined_p ()
                       || range_compatible_p (type (), r.type ()));

on the range_compatible_p() call returning false.

688               if (!ranger->gori ().outgoing_edge_range_p (r, e, idx,
689                                                          
*get_global_range_query ()))
690                 continue;
691               r.intersect (path_range);

(gdb) p path_range.dump(stderr)
[irange] E [0, 0]$5 = void

(gdb) p r.dump(stderr)
[irange] int [-INF, -1][2, +INF]

I guess E and int are not compatible types ?  for ranges we check:

  return (TYPE_PRECISION (type1) == TYPE_PRECISION (type2)
          && TYPE_SIGN (type1) == TYPE_SIGN (type2));

Reply via email to