https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119614
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reduced testcase: volatile int v; [[gnu::noinline]] const char * foo (int x) { v += x; return 0; } 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); } Guess I need to extend my hack to work also on pointer singletons and maybe floating point values as well.