https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119614
--- Comment #8 from Sam James <sjames at gcc dot gnu.org> --- Sorry, not very nice, but this fails with -O2 and works with -O1: ``` struct { } b; struct d { d(int); }; typedef const char *(*c)(int *, const char *, int *, d, const int *, unsigned long); char *f(); int e, g; void k(void *, int); struct l { void h(); template <int> void h(int, int, int, d, int, int) { static c i{j<1>}; i(0, 0, 0, 1, 0, 1); } template <bool> static const char *j(int *, const char *, int *, d, const int *, unsigned long); }; __attribute__((noinline)) char *m() { k(0, 1); return 0; } void l::h() { h<1>(1, 1, 1, 1, 1, 1); } template <bool> const char *l::j(int *, const char *, int *, d, const int *, unsigned long) { switch (e) case 1: { auto a = b; if (g) return 0; [[clang::musttail]] return m(); } return f(); } ```