Stephen Canon | ca8eefd | 2015-09-15 00:21:56 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -fsyntax-only -verify -Wconversion %s |
| 2 | |
| 3 | typedef __attribute__((ext_vector_type(4))) char char4; |
| 4 | typedef __attribute__((ext_vector_type(4))) short short4; |
| 5 | typedef __attribute__((ext_vector_type(1))) float float1; |
| 6 | |
| 7 | static void test() { |
| 8 | char4 vc4; |
| 9 | float f; |
| 10 | // Not allowed. There's no splatting conversion between float and int vector, |
| 11 | // and we don't want to bitcast f to vector-of-char (as would happen with the |
| 12 | // old-style vector types). |
| 13 | vc4 += f; // expected-error {{cannot convert between vector values of different size}} |
| 14 | short4 vs4; |
| 15 | long long ll; |
| 16 | // This one is OK; we don't re-interpret ll as short4, rather we splat its |
| 17 | // value, which should produce a warning about clamping. |
| 18 | vs4 += ll; // expected-warning {{implicit conversion loses integer precision}} |
| 19 | } |