1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only %s -verify -Wvector-conversions
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotypedef long long t1 __attribute__ ((vector_size (8)));
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotypedef char t2 __attribute__ ((vector_size (16)));
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotypedef float t3 __attribute__ ((vector_size (16)));
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f()
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao{
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  t1 v1;
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  t2 v2;
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  t3 v3;
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v2 = (t2)v1; // -expected-error {{invalid conversion between vector type \
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao't2' and 't1' of different size}}
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v1 = (t1)v2; // -expected-error {{invalid conversion between vector type \
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao't1' and 't2' of different size}}
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v3 = (t3)v2;
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v1 = (t1)(char *)10; // -expected-error {{invalid conversion between vector \
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotype 't1' and scalar type 'char *'}}
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v1 = (t1)(long long)10;
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  v1 = (t1)(short)10; // -expected-error {{invalid conversion between vector \
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotype 't1' and integer type 'short' of different size}}
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  long long r1 = (long long)v1;
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  short r2 = (short)v1; // -expected-error {{invalid conversion between vector \
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotype 't1' and integer type 'short' of different size}}
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  char *r3 = (char *)v1; // -expected-error {{invalid conversion between vector\
29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao type 't1' and scalar type 'char *'}}
30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f2(t2 X); // expected-note{{passing argument to parameter 'X' here}}
34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f3(t3 Y) {
36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  f2(Y);  // expected-warning {{incompatible vector types passing 't3' to parameter of type 't2'}}
37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
39