(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
lto/
pr96591_0.C
// { 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>);
}