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.