/* { dg-do run } */ extern void abort (void); int f(void) { return 2; } unsigned int g(void) { return 5; } unsigned int h = 1; typedef unsigned int vec __attribute__((vector_size(16))); vec i = { 1, 2, 3, 4}; vec fv1(void) { return i + (h ? f() : g()); } vec fv2(void) { return (h ? f() : g()) + i; } int main() { vec i, j; j = fv1(); if (j[0] != 3) abort(); i = fv2(); if (i[0] != 3) abort(); return 0; } /* Ignore a warning that is irrelevant to the purpose of this test. */ /* { dg-prune-output ".*GCC vector returned by reference.*" } */ /* { dg-prune-output "changes the ABI" } */