blob: ae2dc98efc4c716c78fe205e1f09fbc0a4c34c3a [file] [log] [blame]
// { dg-lto-do assemble }
// { dg-lto-options { { -O -flto } } }
template <typename scalar_t, unsigned length>
struct builtin_simd
{
using type [[gnu::vector_size(sizeof(scalar_t) * length)]] = scalar_t;
};
struct simd_traits
{
using scalar_type = int;
template <typename new_scalar_type>
using rebind = typename builtin_simd<new_scalar_type, 1>::type;
};
template <typename simd_t>
constexpr simd_t fill(typename simd_traits::scalar_type const scalar)
{
return simd_t{scalar};
}
class Test
{
using score_type = typename builtin_simd<int, 1>::type;
score_type data[1]{fill<score_type>(8)};
};
struct TestFactoryBase
{
virtual Test *CreateTest() = 0;
};
template <class TestClass>
struct TestFactoryImpl : public TestFactoryBase
{
Test *CreateTest() override { return new TestClass; }
};
void MakeAndRegisterTestInfo(TestFactoryBase *factory);
int main() {
MakeAndRegisterTestInfo(new TestFactoryImpl<Test>);
}