// PR c++/16405
// { dg-options "-O2" } 
// { dg-do run }

// There should be exactly one temporary generated for the code in "f"
// below when optimizing -- for the result of "b + c".  We have no
// easy way of checking that directly, so we count the number of calls
// to "memcpy", which is used on (some?) targets to copy temporaries.
// If there is more than two calls (one for coping "*this" to "t", and
// one for copying the temporary to "a"), then there are too many
// temporaries. 

int i;

extern "C"
void *memcpy (void *dest, const void *src, __SIZE_TYPE__ n)
{
  char *d = (char *) dest;
  const char *s = (const char *) src;
  while (n--)
    d[n] = s[n];
  ++i;
  return dest;
}
 
struct T {
  int a[128];
  T &operator+=(T const &v) __attribute__((noinline));
  T operator+(T const &v) const { T t = *this; t += v; return t; }
};

T &T::operator+=(T const &v) {
  return *this;
}

T a, b, c;

void f() { a = b + c; }

int main () {
  i = 0;
  f();
  if (i > 2)
    return 1;
}
