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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
volatile int v;

[[gnu::noinline]] double
foo (int x)
{
  v += x;
  return 0.5;
}

double
bar (int x)
{
  if (x == 42)
    [[gnu::musttail]] return foo (42);
  [[gnu::musttail]] return foo (32);
}

double
baz (int x)
{
  if (x == 5)
    return foo (42);
  return foo (32);
}

shows that we handle floating point right already, but
volatile int v;

[[gnu::noinline]] const char *
foo (int x)
{
  v += x;
  return (const char *) -42;
}

const char *
bar (int x)
{
  if (x == 42)
    [[gnu::musttail]] return foo (42);
  [[gnu::musttail]] return foo (32);
}

const char *
baz (int x)
{
  if (x == 5)
    return foo (42);
  return foo (32);
}

shows that for pointers we can't handle just NULL and need to handle other
singletons.

Reply via email to