| // { dg-do run } |
| // { dg-options "" } |
| // PR c++/9844 |
| |
| extern "C" void abort(); |
| |
| #define vector __attribute__((vector_size(16))) |
| |
| class vector_holder |
| { |
| char __attribute__((vector_size(16))) vec; |
| char __attribute__((vector_size(16))) vec1; |
| public: |
| operator __attribute__((vector_size(16))) short (void) { // { dg-warning "vector returned by ref" "" { target { powerpc*-*-linux* && ilp32 } } } |
| return (__attribute__((vector_size(16))) short) vec; |
| } |
| |
| operator __attribute__((vector_size(16))) int (void) { |
| return (__attribute__((vector_size(16))) int) vec1; |
| } |
| |
| vector_holder () { |
| vec = (__attribute__((vector_size(16))) char) {'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', |
| 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'}; |
| vec1 = (__attribute__((vector_size(16))) char) {'m', 'n', 'o', 'q', 'm', 'n', 'o', 'p', |
| 'm', 'n', 'o', 'q', 'm', 'n', 'o', 'p'}; |
| } |
| }; |
| |
| union u { |
| char f[16]; |
| vector unsigned int v; |
| } data; |
| |
| |
| vector_holder vh; |
| |
| int main() |
| { |
| data.v = (__attribute__((vector_size(16))) short) vh; |
| if (data.f[0] != 'a' || data.f[15] != 'd') |
| abort(); |
| data.v = (__attribute__((vector_size(16))) int) vh; |
| if (data.f[0] != 'm' || data.f[15] != 'p') |
| abort(); |
| |
| return 0; |
| } |