| /* { 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" } */ |