1 // { dg-additional-options "-mavx" { target avx_runtime } }
2 // { dg-do compile { target { avx_runtime || vect_sizes_16B_8B } } }
3 import core.simd;
4
test1()5 void test1()
6 {
7 void16 v1 = void,v2 = void;
8 byte16 b;
9 v2 = b;
10 v1 = v2;
11 static assert(!__traits(compiles, v1 + v2));
12 static assert(!__traits(compiles, v1 - v2));
13 static assert(!__traits(compiles, v1 * v2));
14 static assert(!__traits(compiles, v1 / v2));
15 static assert(!__traits(compiles, v1 % v2));
16 static assert(!__traits(compiles, v1 & v2));
17 static assert(!__traits(compiles, v1 | v2));
18 static assert(!__traits(compiles, v1 ^ v2));
19 static assert(!__traits(compiles, v1 ~ v2));
20 static assert(!__traits(compiles, v1 ^^ v2));
21 static assert(!__traits(compiles, v1 is v2));
22 static assert(!__traits(compiles, v1 !is v2));
23 static assert(!__traits(compiles, v1 == v2));
24 static assert(!__traits(compiles, v1 != v2));
25 static assert(!__traits(compiles, v1 < v2));
26 static assert(!__traits(compiles, v1 > v2));
27 static assert(!__traits(compiles, v1 <= v2));
28 static assert(!__traits(compiles, v1 >= v2));
29 static assert(!__traits(compiles, v1 <> v2));
30 static assert(!__traits(compiles, v1 !< v2));
31 static assert(!__traits(compiles, v1 !> v2));
32 static assert(!__traits(compiles, v1 !<> v2));
33 static assert(!__traits(compiles, v1 <>= v2));
34 static assert(!__traits(compiles, v1 !<= v2));
35 static assert(!__traits(compiles, v1 !>= v2));
36 static assert(!__traits(compiles, v1 !<>= v2));
37 static assert(!__traits(compiles, v1 << 1));
38 static assert(!__traits(compiles, v1 >> 1));
39 static assert(!__traits(compiles, v1 >>> 1));
40 static assert(!__traits(compiles, v1 && v2));
41 static assert(!__traits(compiles, v1 || v2));
42 static assert(!__traits(compiles, ~v1));
43 static assert(!__traits(compiles, -v1));
44 static assert(!__traits(compiles, +v1));
45 static assert(!__traits(compiles, !v1));
46
47 static assert(!__traits(compiles, v1 += v2));
48 static assert(!__traits(compiles, v1 -= v2));
49 static assert(!__traits(compiles, v1 *= v2));
50 static assert(!__traits(compiles, v1 /= v2));
51 static assert(!__traits(compiles, v1 %= v2));
52 static assert(!__traits(compiles, v1 &= v2));
53 static assert(!__traits(compiles, v1 |= v2));
54 static assert(!__traits(compiles, v1 ^= v2));
55 static assert(!__traits(compiles, v1 ~= v2));
56 static assert(!__traits(compiles, v1 ^^= v2));
57 static assert(!__traits(compiles, v1 <<= 1));
58 static assert(!__traits(compiles, v1 >>= 1));
59 static assert(!__traits(compiles, v1 >>>= 1));
60
61 // A cast from vector to non-vector is allowed only when the target is same size Tsarray.
62 static assert(!__traits(compiles, cast(byte)v1)); // 1byte
63 static assert(!__traits(compiles, cast(short)v1)); // 2byte
64 static assert(!__traits(compiles, cast(int)v1)); // 4byte
65 static assert(!__traits(compiles, cast(long)v1)); // 8byte
66 static assert(!__traits(compiles, cast(float)v1)); // 4byte
67 static assert(!__traits(compiles, cast(double)v1)); // 8byte
68 static assert(!__traits(compiles, cast(int[2])v1)); // 8byte Tsarray
69 static assert( __traits(compiles, cast(int[4])v1)); // 16byte Tsarray, OK
70 static assert( __traits(compiles, cast(long[2])v1)); // 16byte Tsarray, OK
71 }
72