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();
}
```

Reply via email to