diff options
Diffstat (limited to 'clang/test/Sema/vector-cast.c')
-rw-r--r-- | clang/test/Sema/vector-cast.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/test/Sema/vector-cast.c b/clang/test/Sema/vector-cast.c index a05625078be..c0382892b69 100644 --- a/clang/test/Sema/vector-cast.c +++ b/clang/test/Sema/vector-cast.c @@ -45,15 +45,23 @@ void f3(t3 Y) { } typedef float float2 __attribute__ ((vector_size (8))); +typedef __attribute__((vector_size(8))) double float64x1_t; +typedef __attribute__((vector_size(16))) double float64x2_t; +float64x1_t vget_low_f64(float64x2_t __p0); void f4() { float2 f2; - double d; + double d, a, b, c; + float64x2_t v = {0.0, 1.0}; f2 += d; - // We used to allow the next statement, but we've always rejected the next two - // statements + a = 3.0 + vget_low_f64(v); + b = vget_low_f64(v) + 3.0; + c = vget_low_f64(v); + // LAX conversions within compound assignments are not supported. // FIXME: This diagnostic is inaccurate. d += f2; // expected-error {{cannot convert between vector values of different size}} + c -= vget_low_f64(v); // expected-error {{cannot convert between vector values of different size}} + // LAX conversions between scalar and vector types require same size and one element sized vectors. d = f2; // expected-error {{assigning to 'double' from incompatible type 'float2'}} d = d + f2; // expected-error {{assigning to 'double' from incompatible type 'float2'}} } |