URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 301 |
Rev 384 |
// PR middle-end/34018
|
// PR middle-end/34018
|
// { dg-do compile }
|
// { dg-do compile }
|
// { dg-options "-O1" }
|
// { dg-options "-O1" }
|
|
|
template
|
template
|
struct A
|
struct A
|
{
|
{
|
typedef E F;
|
typedef E F;
|
E elems[N];
|
E elems[N];
|
A () {}
|
A () {}
|
E *begin () { return elems; }
|
E *begin () { return elems; }
|
const E *begin () const { return elems; }
|
const E *begin () const { return elems; }
|
|
|
explicit A (F const &v0, F const &v1, F const &v2)
|
explicit A (F const &v0, F const &v1, F const &v2)
|
{
|
{
|
elems[0] = v0;
|
elems[0] = v0;
|
elems[1] = v1;
|
elems[1] = v1;
|
elems[2] = v2;
|
elems[2] = v2;
|
}
|
}
|
};
|
};
|
|
|
template
|
template
|
inline void
|
inline void
|
bar (const E1 *a1, E2 const &a2, E3 *a3, unsigned long const &sz)
|
bar (const E1 *a1, E2 const &a2, E3 *a3, unsigned long const &sz)
|
{
|
{
|
E3 *r = a3 + sz;
|
E3 *r = a3 + sz;
|
for (;a3 != r; a1++, a3++)
|
for (;a3 != r; a1++, a3++)
|
*a3 = *a1 - a2;
|
*a3 = *a1 - a2;
|
}
|
}
|
|
|
template
|
template
|
inline A
|
inline A
|
operator- (A const& a1, E const& a2)
|
operator- (A const& a1, E const& a2)
|
{
|
{
|
typedef A G;
|
typedef A G;
|
G a3;
|
G a3;
|
bar (a1.begin (), a2, a3.begin (), N);
|
bar (a1.begin (), a2, a3.begin (), N);
|
return a3;
|
return a3;
|
}
|
}
|
|
|
struct B
|
struct B
|
{
|
{
|
B (A const &m) : n (m - static_cast(1)) {}
|
B (A const &m) : n (m - static_cast(1)) {}
|
A n;
|
A n;
|
};
|
};
|
|
|
void
|
void
|
foo ()
|
foo ()
|
{
|
{
|
B t (A (0,0,0));
|
B t (A (0,0,0));
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.