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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I don't know the IPA code enough to know whether different operand_type vs.
param_type (in the !types_compatible_p sense) means just user bug (in that case
returning VARYING is perfectly fine), or if it can happen also on valid code,
where say caller has one type of argument and callee a different and there is
an implicit (or explicit) cast in between the two.  The latter case would be
nice to get handled without giving up.
I mean something like
void
foo (int x)
{
  asm volatile ("" : "+r" (x));
}

void
bar (long x)
{
  foo (x);
}

void
baz (long x)
{
  if (x < -42 || x >= 185)
    return;
  bar (x);
}
kind of thing (but making sure we don't inline and IPA-VRP tries to propagate
something etc.).

Reply via email to