Merge from branches/gcc-4_8-branch up to rev 207411.
[official-gcc.git] / gcc-4_8-branch / gcc / testsuite / g++.dg / ext / attribute-test-2.C
blobd7c417dccaac1866a7b4f62ae84a14460f6926a3
1 // { dg-do run }
2 // { dg-options "-Wno-abi" }
3 // PR c++/9844
5 extern "C" void abort();
7 #define vector __attribute__((vector_size(16)))
9 class vector_holder
11    char __attribute__((vector_size(16))) vec;
12    char __attribute__((vector_size(16))) vec1;
13 public:
14    operator __attribute__((vector_size(16))) short (void) {
15      return (__attribute__((vector_size(16))) short) vec;
16    }
18    operator __attribute__((vector_size(16))) unsigned int (void) {
19      return (__attribute__((vector_size(16))) unsigned int) vec1;
20    }
22    vector_holder () {
23         vec = (__attribute__((vector_size(16))) char) {'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd',
24                                                        'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'};
25         vec1 = (__attribute__((vector_size(16))) char) {'m', 'n', 'o', 'q', 'm', 'n', 'o', 'p',
26                                                         'm', 'n', 'o', 'q', 'm', 'n', 'o', 'p'};
27    }
30 union u {
31               char f[16];
32               vector unsigned int v;
33               vector short vs;
34 } data;
37 vector_holder vh;
39 int main()
41   data.vs = (__attribute__((vector_size(16))) short) vh;
42   if (data.f[0] != 'a' || data.f[15] != 'd')
43     abort(); 
44   data.v = (__attribute__((vector_size(16))) unsigned int) vh;
45   if (data.f[0] != 'm' || data.f[15] != 'p')
46     abort(); 
48   return 0;
51 /* Ignore a warning that is irrelevant to the purpose of this test.  */
52 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
53 /* { dg-prune-output "changes the ABI" } */