https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90756
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Hand reduced: template <int N, typename T> struct A { typedef T __attribute__((vector_size(N * sizeof(T)))) a; }; template <int N, typename T> using U = typename A<N, T>::a; using B = U<4, float>; using C = U<4, unsigned long long>; using D = U<4, short>; B z; template <typename T, typename U> void foo (U, T); template <typename T, typename U> T bar (U); D y(B); template <typename T, typename U> T baz (U); int x; void qux () { B n = z, b = z; while (true) switch (x) { case 0 ... 15: n = baz<B> (1); case 16: { B o = n; n = b; b = o; } case 17 ... 46: { D u = y(b); C v = bar<C> (u); foo (qux, v); } } }