https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118243
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Indeed we don't seem to split a vector in the same way: typedef int complex_t __attribute__((vector_size(sizeof(int)*2))); struct A { complex_t value; A(double r) : value{0, r} {} }; [[gnu::noipa]] void f(int a) { if (a != 1) __builtin_abort(); } [[gnu::noipa]] void g(const char *, int x){} void test(const complex_t &c, const int &x) { if (x < 0) g("%d\n", x); else { f( c[1]); } } void f1() { { A a{1}; test(a.value, 123); } } int main() { f1(); }