1 // RUN: %clang_cc1 %s -verify -fsyntax-only -Wvector-conversion -triple x86_64-apple-darwin10
2 typedef unsigned int v2u
__attribute__ ((vector_size (8)));
3 typedef int v2s
__attribute__ ((vector_size (8)));
4 typedef float v2f
__attribute__ ((vector_size(8)));
6 void test1(v2u v2ua
, v2s v2sa
, v2f v2fa
) {
7 // Bitwise binary operators
9 (void)(v2fa
& v2fa
); // expected-error{{invalid operands to binary expression}}
13 (void)(~v2fa
); // expected-error{{invalid argument type 'v2f' (vector of 2 'float' values) to unary}}
15 // Comparison operators
16 v2ua
= (v2ua
==v2sa
); // expected-warning{{incompatible vector types assigning to 'v2u' (vector of 2 'unsigned int' values) from '__attribute__((__vector_size__(2 * sizeof(int)))) int' (vector of 2 'int' values}}
20 int array1
[v2ua
]; // expected-error{{size of array has non-integer type 'v2u' (vector of 2 'unsigned int' values}}
22 // FIXME: error message below needs type!
23 (void)(array2
[v2ua
]); // expected-error{{array subscript is not an integer}}
27 v2s_ptr
= v2u_ptr
; // expected-warning{{converts between pointers to integer types with different sign}}
30 void testLogicalVecVec(v2u v2ua
, v2s v2sa
, v2f v2fa
) {
32 v2ua
= v2ua
&& v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
33 v2ua
= v2ua
|| v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
35 v2ua
= v2sa
&& v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
36 v2ua
= v2sa
|| v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
38 v2ua
= v2ua
&& v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
39 v2ua
= v2ua
|| v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
41 v2ua
= v2sa
&& v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
42 v2ua
= v2sa
|| v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
44 v2sa
= v2sa
&& v2sa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2s'}}
45 v2sa
= v2sa
|| v2sa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2s'}}
47 v2sa
= v2ua
&& v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
48 v2sa
= v2ua
|| v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
50 v2sa
= v2sa
&& v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
51 v2sa
= v2sa
|| v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
53 v2sa
= v2sa
&& v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
54 v2sa
= v2sa
|| v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
56 v2sa
= v2ua
&& v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
57 v2sa
= v2ua
|| v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
59 v2fa
= v2fa
&& v2fa
; // expected-error {{logical expression with vector types 'v2f' (vector of 2 'float' values) and 'v2f'}}
60 v2fa
= v2fa
|| v2fa
; // expected-error {{logical expression with vector types 'v2f' (vector of 2 'float' values) and 'v2f'}}
62 v2fa
= v2sa
&& v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
63 v2fa
= v2sa
|| v2fa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2f' (vector of 2 'float' values)}}
65 v2fa
= v2ua
&& v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
66 v2fa
= v2ua
|| v2fa
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2f' (vector of 2 'float' values)}}
68 v2fa
= v2ua
&& v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
69 v2fa
= v2ua
|| v2ua
; // expected-error {{logical expression with vector types 'v2u' (vector of 2 'unsigned int' values) and 'v2u'}}
71 v2fa
= v2sa
&& v2sa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2s'}}
72 v2fa
= v2sa
|| v2sa
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2s'}}
74 v2fa
= v2sa
&& v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
75 v2fa
= v2sa
|| v2ua
; // expected-error {{logical expression with vector types 'v2s' (vector of 2 'int' values) and 'v2u' (vector of 2 'unsigned int' values)}}
78 void testLogicalVecScalar(v2u v2ua
, v2s v2sa
, v2f v2fa
) {
80 v2ua
= v2ua
&& u1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'unsigned int' is only supported in C++}}
81 v2ua
= v2ua
|| u1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'unsigned int' is only supported in C++}}
83 v2sa
= v2sa
&& u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2s' (vector of 2 'int' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2s' (vector of 2 'int' values) and 'unsigned int')}}
84 v2sa
= v2sa
|| u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2s' (vector of 2 'int' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2s' (vector of 2 'int' values) and 'unsigned int')}}
86 v2ua
= v2sa
&& u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2s' (vector of 2 'int' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2s' (vector of 2 'int' values) and 'unsigned int')}}
87 v2ua
= v2sa
|| u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2s' (vector of 2 'int' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2s' (vector of 2 'int' values) and 'unsigned int')}}
88 v2sa
= v2ua
&& u1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'unsigned int' is only supported in C++}}
89 v2sa
= v2ua
|| u1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'unsigned int' is only supported in C++}}
91 v2ua
= v2fa
&& u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'unsigned int')}}
92 v2ua
= v2fa
|| u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'unsigned int')}}
94 v2sa
= v2fa
&& u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'unsigned int')}}
95 v2sa
= v2fa
|| u1
; // expected-error {{cannot convert between scalar type 'unsigned int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'unsigned int')}}
98 v2ua
= v2ua
&& s1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'int' is only supported in C++}}
99 v2ua
= v2ua
|| s1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'int' is only supported in C++}}
101 v2sa
= v2sa
&& s1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'int' is only supported in C++}}
102 v2sa
= v2sa
|| s1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'int' is only supported in C++}}
104 v2ua
= v2sa
&& s1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'int' is only supported in C++}}
105 v2ua
= v2sa
|| s1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'int' is only supported in C++}}
107 v2sa
= v2ua
&& s1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'int' is only supported in C++}}
108 v2sa
= v2ua
|| s1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'int' is only supported in C++}}
110 v2ua
= v2fa
&& s1
; // expected-error {{cannot convert between scalar type 'int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'int'}}
111 v2ua
= v2fa
|| s1
; // expected-error {{cannot convert between scalar type 'int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'int'}}
113 v2sa
= v2fa
&& s1
; // expected-error {{cannot convert between scalar type 'int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'int'}}
114 v2sa
= v2fa
|| s1
; // expected-error {{cannot convert between scalar type 'int' and vector type 'v2f' (vector of 2 'float' values) as implicit conversion would cause truncation}} expected-error {{invalid operands to binary expression ('v2f' (vector of 2 'float' values) and 'int'}}
117 v2ua
= v2ua
&& f1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'float' is only supported in C++}}
118 v2ua
= v2ua
|| f1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'float' is only supported in C++}}
120 v2sa
= v2sa
&& f1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'float' is only supported in C++}}
121 v2sa
= v2sa
|| f1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'float' is only supported in C++}}
123 v2ua
= v2sa
&& f1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'float' is only supported in C++}}
124 v2ua
= v2sa
|| f1
; // expected-error {{logical expression with vector type 'v2s' (vector of 2 'int' values) and non-vector type 'float' is only supported in C++}}
126 v2sa
= v2ua
&& f1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'float' is only supported in C++}}
127 v2sa
= v2ua
|| f1
; // expected-error {{logical expression with vector type 'v2u' (vector of 2 'unsigned int' values) and non-vector type 'float' is only supported in C++}}
129 v2ua
= v2fa
&& f1
; // expected-error {{logical expression with vector type 'v2f' (vector of 2 'float' values) and non-vector type 'float' is only supported in C++}}
130 v2ua
= v2fa
|| f1
; // expected-error {{logical expression with vector type 'v2f' (vector of 2 'float' values) and non-vector type 'float' is only supported in C++}}
132 v2sa
= v2fa
&& f1
; // expected-error {{logical expression with vector type 'v2f' (vector of 2 'float' values) and non-vector type 'float' is only supported in C++}}
133 v2sa
= v2fa
|| f1
; // expected-error {{logical expression with vector type 'v2f' (vector of 2 'float' values) and non-vector type 'float' is only supported in C++}}