vector-assign.c revision d4eea8362605807327735727a9098abe1eb23b19
1// RUN: %clang_cc1 %s -verify -fsyntax-only -Wvector-conversions 2typedef unsigned int v2u __attribute__ ((vector_size (8))); 3typedef signed int v2s __attribute__ ((vector_size (8))); 4typedef signed int v1s __attribute__ ((vector_size (4))); 5typedef float v2f __attribute__ ((vector_size(8))); 6typedef signed short v4ss __attribute__ ((vector_size (8))); 7 8void 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 42float test2(__attribute__((vector_size(16))) float a, int b) { 43 return a[b]; 44} 45 46// PR4838 47typedef long long __attribute__((__vector_size__(2 * sizeof(long long)))) 48longlongvec; 49 50void test3a(longlongvec *); 51void test3(const unsigned *src) { 52 test3a(src); // expected-warning {{incompatible pointer types passing 'unsigned int const *' to parameter of type 'longlongvec *'}} 53} 54