1 // RUN: %clang_cc1 %s -verify -fsyntax-only -Wvector-conversion 2 typedef unsigned int v2u __attribute__ ((vector_size (8))); 3 typedef signed int v2s __attribute__ ((vector_size (8))); 4 typedef signed int v1s __attribute__ ((vector_size (4))); 5 typedef float v2f __attribute__ ((vector_size(8))); 6 typedef signed short v4ss __attribute__ ((vector_size (8))); 7 8 void test1() { 9 v2s v1; 10 v2u v2; 11 v1s v3; 12 v2f v4; 13 v4ss v5; 14 15 v1 = v2; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v2u'}} 16 v1 = v3; // expected-error {{assigning to 'v2s' from incompatible type 'v1s'}} 17 v1 = v4; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v2f'}} 18 v1 = v5; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v4ss'}} 19 20 v2 = v1; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v2s'}} 21 v2 = v3; // expected-error {{assigning to 'v2u' from incompatible type 'v1s'}} 22 v2 = v4; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v2f'}} 23 v2 = v5; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v4ss'}} 24 25 v3 = v1; // expected-error {{assigning to 'v1s' from incompatible type 'v2s'}} 26 v3 = v2; // expected-error {{assigning to 'v1s' from incompatible type 'v2u'}} 27 v3 = v4; // expected-error {{assigning to 'v1s' from incompatible type 'v2f'}} 28 v3 = v5; // expected-error {{assigning to 'v1s' from incompatible type 'v4ss'}} 29 30 v4 = v1; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v2s'}} 31 v4 = v2; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v2u'}} 32 v4 = v3; // expected-error {{assigning to 'v2f' from incompatible type 'v1s'}} 33 v4 = v5; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v4ss'}} 34 35 v5 = v1; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2s'}} 36 v5 = v2; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2u'}} 37 v5 = v3; // expected-error {{assigning to 'v4ss' from incompatible type 'v1s'}} 38 v5 = v4; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2f'}} 39 } 40 41 // PR2263 42 float test2(__attribute__((vector_size(16))) float a, int b) { 43 return a[b]; 44 } 45 46 // PR4838 47 typedef long long __attribute__((__vector_size__(2 * sizeof(long long)))) 48 longlongvec; 49 50 void test3a(longlongvec *); // expected-note{{passing argument to parameter here}} 51 void test3(const unsigned *src) { 52 test3a(src); // expected-warning {{incompatible pointer types passing 'const unsigned int *' to parameter of type 'longlongvec *'}} 53 } 54