1 | // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only |
2 | |
3 | // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only |
4 | |
5 | typedef __attribute__((ext_vector_type(2))) char char2; |
6 | typedef __attribute__((ext_vector_type(3))) char char3; |
7 | |
8 | typedef __attribute__((ext_vector_type(2))) int int2; |
9 | |
10 | typedef __attribute__((ext_vector_type(2))) float float2; |
11 | |
12 | // ** Positive tests ** |
13 | |
14 | char2 ptest01(char2 c, char s) { |
15 | return c << s; |
16 | } |
17 | |
18 | char2 ptest02(char2 c, char2 s) { |
19 | return c << s; |
20 | } |
21 | |
22 | char2 ptest03(char2 c, int s) { |
23 | return c << s; |
24 | } |
25 | |
26 | char2 ptest04(char2 c, int2 s) { |
27 | return c << s; |
28 | } |
29 | |
30 | int2 ptest05(int2 c, char2 s) { |
31 | return c << s; |
32 | } |
33 | |
34 | char2 ptest06(char2 c) { |
35 | return c << 1; |
36 | } |
37 | |
38 | void ptest07() { |
39 | char3 v = {1,1,1}; |
40 | char3 w = {1,2,3}; |
41 | |
42 | v <<= w; |
43 | } |
44 | |
45 | // ** Negative tests ** |
46 | |
47 | char2 ntest01(char c, char2 s) { |
48 | return c << s; // expected-error {{requested shift is a vector of type 'char2' (vector of 2 'char' values) but the first operand is not a vector ('char')}} |
49 | } |
50 | |
51 | char3 ntest02(char3 c, char2 s) { |
52 | return c << s; // expected-error {{vector operands do not have the same number of elements ('char3' (vector of 3 'char' values) and 'char2' (vector of 2 'char' values))}} |
53 | } |
54 | |
55 | float2 ntest03(float2 c, char s) { |
56 | return c << s; // expected-error {{used type 'float2' (vector of 2 'float' values) where integer is required}} |
57 | } |
58 | |
59 | int2 ntest04(int2 c, float s) { |
60 | return c << s; // expected-error {{used type 'float' where integer is required}} |
61 | } |
62 | |