13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 %s -verify -fsyntax-only -Wvector-conversions
2e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlssontypedef unsigned int v2u __attribute__ ((vector_size (8)));
3e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlssontypedef signed int v2s __attribute__ ((vector_size (8)));
4e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlssontypedef signed int v1s __attribute__ ((vector_size (4)));
5e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlssontypedef float v2f __attribute__ ((vector_size(8)));
6e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlssontypedef signed short v4ss __attribute__ ((vector_size (8)));
7e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
8fe3b81fccf046092da96e00568865fe4045e5913Chris Lattnervoid test1() {
9e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson  v2s v1;
10e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson  v2u v2;
11e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson  v1s v3;
12e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson  v2f v4;
13e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson  v4ss v5;
14e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
1506b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v1 = v2; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v2u'}}
1606b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v1 = v3; // expected-error {{assigning to 'v2s' from incompatible type 'v1s'}}
1706b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v1 = v4; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v2f'}}
1806b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v1 = v5; // expected-warning {{incompatible vector types assigning to 'v2s' from 'v4ss'}}
19e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
2006b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v2 = v1; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v2s'}}
2106b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v2 = v3; // expected-error {{assigning to 'v2u' from incompatible type 'v1s'}}
2206b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v2 = v4; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v2f'}}
2306b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v2 = v5; // expected-warning {{incompatible vector types assigning to 'v2u' from 'v4ss'}}
24e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
2506b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v3 = v1; // expected-error {{assigning to 'v1s' from incompatible type 'v2s'}}
2606b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v3 = v2; // expected-error {{assigning to 'v1s' from incompatible type 'v2u'}}
2706b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v3 = v4; // expected-error {{assigning to 'v1s' from incompatible type 'v2f'}}
2806b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v3 = v5; // expected-error {{assigning to 'v1s' from incompatible type 'v4ss'}}
29e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
3006b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v4 = v1; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v2s'}}
3106b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v4 = v2; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v2u'}}
3206b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v4 = v3; // expected-error {{assigning to 'v2f' from incompatible type 'v1s'}}
3306b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v4 = v5; // expected-warning {{incompatible vector types assigning to 'v2f' from 'v4ss'}}
34e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson
3506b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v5 = v1; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2s'}}
3606b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v5 = v2; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2u'}}
3706b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v5 = v3; // expected-error {{assigning to 'v4ss' from incompatible type 'v1s'}}
3806b452bc5cfcd82a80f49865500c8526fb9b4c15Douglas Gregor  v5 = v4; // expected-warning {{incompatible vector types assigning to 'v4ss' from 'v2f'}}
39e87cd98ad8fb36695704af0849c8edc2ed98b369Anders Carlsson}
408933f90fadb06d67084b311695cc79f0edf58e98Chris Lattner
418933f90fadb06d67084b311695cc79f0edf58e98Chris Lattner// PR2263
42fe3b81fccf046092da96e00568865fe4045e5913Chris Lattnerfloat test2(__attribute__((vector_size(16))) float a, int b) {
438933f90fadb06d67084b311695cc79f0edf58e98Chris Lattner   return a[b];
448933f90fadb06d67084b311695cc79f0edf58e98Chris Lattner}
458933f90fadb06d67084b311695cc79f0edf58e98Chris Lattner
46fe3b81fccf046092da96e00568865fe4045e5913Chris Lattner// PR4838
47fe3b81fccf046092da96e00568865fe4045e5913Chris Lattnertypedef long long __attribute__((__vector_size__(2 * sizeof(long long))))
48fe3b81fccf046092da96e00568865fe4045e5913Chris Lattnerlonglongvec;
49fe3b81fccf046092da96e00568865fe4045e5913Chris Lattner
5082d10e709325891eaf37609ad9d6178c11fe6b22Douglas Gregorvoid test3a(longlongvec *); // expected-note{{passing argument to parameter here}}
51fe3b81fccf046092da96e00568865fe4045e5913Chris Lattnervoid test3(const unsigned *src) {
5203028a90c18c484ab477e6535441ec5825a7328aChris Lattner  test3a(src);  // expected-warning {{incompatible pointer types passing 'const unsigned int *' to parameter of type 'longlongvec *'}}
53fe3b81fccf046092da96e00568865fe4045e5913Chris Lattner}
54