44 lines
1.7 KiB
D
44 lines
1.7 KiB
D
// https://issues.dlang.org/show_bug.cgi?id=17720
|
|
// { dg-additional-options "-mavx2" { target avx2_runtime } }
|
|
// { dg-do compile { target { avx2_runtime || vect_sizes_32B_16B } } }
|
|
import core.simd;
|
|
|
|
alias TypeTuple(T...) = T;
|
|
|
|
void test17720()
|
|
{
|
|
alias Vector32s = TypeTuple!(
|
|
void32, byte32, short16, int8, long4,
|
|
ubyte32, ushort16, uint8, ulong4, float8, double4);
|
|
|
|
// OK: __vector(T) -> __vector(void[]) of same size.
|
|
// NG: __vector(T) -> __vector(void[]) of different size.
|
|
// NG: explicit cast __vector(T) -> __vector(void[]) of different size.
|
|
foreach (V; Vector32s)
|
|
{
|
|
static assert( __traits(compiles, { void32 v = V.init; }));
|
|
static assert(!__traits(compiles, { void16 v = V.init; }));
|
|
static assert(!__traits(compiles, { void16 v = cast(void16)V.init; }));
|
|
}
|
|
|
|
// NG: __vector(T) -> __vector(T) of same size.
|
|
// OK: explicit cast __vector(T) -> __vector(T) of same size.
|
|
// NG: __vector(T) -> __vector(T) of different size.
|
|
// NG: explicit cast __vector(T) -> __vector(T) of different size.
|
|
foreach (V; Vector32s)
|
|
{
|
|
static if (is(V == double4))
|
|
{
|
|
static assert(!__traits(compiles, { long4 v = V.init; }));
|
|
static assert( __traits(compiles, { long4 v = cast(long4)V.init; }));
|
|
}
|
|
else
|
|
{
|
|
static assert(!__traits(compiles, { double4 v = V.init; }));
|
|
static assert( __traits(compiles, { double4 v = cast(double4)V.init; }));
|
|
}
|
|
static assert(!__traits(compiles, { double2 v = V.init; }));
|
|
static assert(!__traits(compiles, { double2 v = cast(double2)V.init; }));
|
|
}
|
|
}
|