1 // RUN: %clang_cc1 -triple=powerpc-apple-darwin8 -faltivec -fsyntax-only -verify %s
4 __vector
signed char vv_sc
;
5 __vector
unsigned char vv_uc
;
7 __vector
signed short vv_ss
;
8 __vector
unsigned short vv_us
;
9 __vector
short int vv_si
;
10 __vector
signed short int vv_ssi
;
11 __vector
unsigned short int vv_usi
;
13 __vector
signed int vv_sint
;
14 __vector
unsigned int vv_ui
;
16 __vector
bool char vv_bc
;
17 __vector
bool short vv_bs
;
18 __vector
bool int vv_bi
;
19 __vector __pixel vv_p
;
22 void vf__a(__vector
int a
);
23 void vf__a2(int b
, __vector
int a
);
26 vector
signed char v_sc
;
27 vector
unsigned char v_uc
;
29 vector
signed short v_ss
;
30 vector
unsigned short v_us
;
31 vector
short int v_si
;
32 vector
signed short int v_ssi
;
33 vector
unsigned short int v_usi
;
35 vector
signed int v_sint
;
36 vector
unsigned int v_ui
;
38 vector
bool char v_bc
;
39 vector
bool short v_bs
;
44 void f_a(vector
int a
);
45 void f_a2(int b
, vector
int a
);
47 vector
int v
= (vector
int)(-1);
49 // These should have warnings.
50 __vector
long vv_l
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
51 __vector
signed long vv_sl
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
52 __vector
unsigned long vv_ul
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
53 __vector
long int vv_li
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
54 __vector
signed long int vv_sli
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
55 __vector
unsigned long int vv_uli
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
56 vector
long v_l
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
57 vector
signed long v_sl
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
58 vector
unsigned long v_ul
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
59 vector
long int v_li
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
60 vector
signed long int v_sli
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
61 vector
unsigned long int v_uli
; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
62 __vector
long double vv_ld
; // expected-warning {{Use of 'long' with '__vector' is deprecated}} expected-error {{cannot use 'double' with '__vector'}}
63 vector
long double v_ld
; // expected-warning {{Use of 'long' with '__vector' is deprecated}} expected-error {{cannot use 'double' with '__vector'}}
65 // These should have errors.
66 __vector
double vv_d1
; // expected-error {{cannot use 'double' with '__vector'}}
67 vector
double v_d2
; // expected-error {{cannot use 'double' with '__vector'}}
68 __vector
long double vv_ld3
; // expected-warning {{Use of 'long' with '__vector' is deprecated}} expected-error {{cannot use 'double' with '__vector'}}
69 vector
long double v_ld4
; // expected-warning {{Use of 'long' with '__vector' is deprecated}} expected-error {{cannot use 'double' with '__vector'}}
70 vector
bool v_b
; // expected-error {{error: C++ requires a type specifier for all declarations}}
71 vector
bool float v_bf
; // expected-error {{cannot use 'float' with '__vector bool'}}
72 vector
bool double v_bd
; // expected-error {{cannot use 'double' with '__vector bool'}}
73 vector
bool pixel v_bp
; // expected-error {{cannot use '__pixel' with '__vector bool'}}
74 vector
bool signed char v_bsc
; // expected-error {{cannot use 'signed' with '__vector bool'}}
75 vector
bool unsigned int v_bsc2
; // expected-error {{cannot use 'unsigned' with '__vector bool'}}
76 vector
bool long v_bl
; // expected-error {{cannot use 'long' with '__vector bool'}}
77 vector
bool long long v_bll
; // expected-error {{cannot use 'long long' with '__vector bool'}}
80 __vector
unsigned int v
= {0,0,0,0};
81 __vector
int v__cast
= (__vector
int)v
;
82 __vector
int v_cast
= (vector
int)v
;
83 __vector
char vb_cast
= (vector
char)v
;
85 // Check some casting between gcc and altivec vectors.
86 #define gccvector __attribute__((vector_size(16)))
87 gccvector
unsigned int gccv
= {0,0,0,0};
88 gccvector
unsigned int gccv1
= gccv
;
89 gccvector
int gccv2
= (gccvector
int)gccv
;
90 gccvector
unsigned int gccv3
= v
;
91 __vector
unsigned int av
= gccv
;
92 __vector
int avi
= (__vector
int)gccv
;
93 gccvector
unsigned int gv
= v
;
94 gccvector
int gvi
= (gccvector
int)v
;
95 __attribute__((vector_size(8))) unsigned int gv8
;
96 gv8
= gccv
; // expected-error {{assigning to '__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int' from incompatible type '__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int'}}
97 av
= gv8
; // expected-error {{assigning to '__vector unsigned int' from incompatible type '__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int'}}
100 __vector
unsigned int tv
= gccv
;
102 gccvector
unsigned int tgv
= v
;
105 // Now for the C++ version:
110 void f__a(__vector
int a
);
111 void f__a2(int b
, __vector
int a
);
117 void f__a(vector
int a
);
118 void f__a2(int b
, vector
int a
);
122 // bug 6895 - Vectorl literal casting confusion.
123 vector
char v1
= (vector
char)((vector
int)(1, 2, 3, 4));
124 vector
char v2
= (vector
char)((vector
float)(1.0f
, 2.0f
, 3.0f
, 4.0f
));
125 vector
char v3
= (vector
char)((vector
int)('a', 'b', 'c', 'd'));
126 vector
int v4
= (vector
int)(1, 2, 3, 4);
127 vector
float v5
= (vector
float)(1.0f
, 2.0f
, 3.0f
, 4.0f
);
128 vector
char v6
= (vector
char)((vector
int)(1+2, -2, (int)(2.0 * 3), -(5-3)));
130 // bug 7553 - Problem with '==' and vectors
133 res_b
= (vv_sc
== vv_sc
);
134 res_b
= (vv_uc
!= vv_uc
);
135 res_b
= (vv_s
> vv_s
);
136 res_b
= (vv_us
>= vv_us
);
137 res_b
= (vv_i
< vv_i
);
138 res_b
= (vv_ui
<= vv_ui
);
139 res_b
= (vv_f
<= vv_f
);
142 // vecreturn attribute test
146 } __attribute__((vecreturn
));
148 Vector
Add(Vector lhs
, Vector rhs
)
151 result
.xyzw
= vec_add(lhs
.xyzw
, rhs
.xyzw
);
152 return result
; // This will (eventually) be returned in a register
155 // vecreturn attribute test - should error because of virtual function.
156 class VectorClassNonPod
160 VectorClassNonPod() {}
161 virtual ~VectorClassNonPod() {}
162 } __attribute__((vecreturn
)); // expected-error {{the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)}}
164 // vecreturn attribute test - should error because of virtual function.
165 class VectorClassMultipleMembers
170 } __attribute__((vecreturn
)); // expected-error {{the vecreturn attribute can only be used on a class or structure with one member, which must be a vector}}