Home | History | Annotate | Download | only in SemaOpenCL
      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