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