summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/vector-cast.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Sema/vector-cast.c')
-rw-r--r--clang/test/Sema/vector-cast.c14
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'}}
}
OpenPOWER on IntegriCloud