OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [opt/] [inline14.C] - Rev 774

Go to most recent revision | Compare with Previous | Blame | View Log

// PR middle-end/34018
// { dg-do compile }
// { dg-options "-O1" }

template <typename E, unsigned long N>
struct A
{
  typedef E F;
  E elems[N];
  A () {}
  E *begin () { return elems; }
  const E *begin () const { return elems; }

  explicit A (F const &v0, F const &v1, F const &v2)
  {
    elems[0] = v0;
    elems[1] = v1;
    elems[2] = v2;
  }
};

template <typename E1, typename E2, typename E3>
inline void
bar (const E1 *a1, E2 const &a2, E3 *a3, unsigned long const &sz)
{
  E3 *r = a3 + sz;
  for (;a3 != r; a1++, a3++)
    *a3 = *a1 - a2;
}

template<typename E, unsigned long N>
inline A<E, N>
operator- (A<E, N> const& a1, E const& a2)
{
  typedef A<E, N> G;
  G a3;
  bar (a1.begin (), a2, a3.begin (), N);
  return a3;
}

struct B
{
  B (A<unsigned long, 3> const &m) : n (m - static_cast<unsigned long>(1)) {}
  A<unsigned long, 3> n;
};

void
foo ()
{
  B t (A<unsigned long, 3> (0,0,0));
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.