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