aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ext/varargs1.C
blob: b67d788e1b732ebf4cf4e7f33ded5cdc31dad7dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Test that passing an object with non-trivial copy constructor and
// destructor is (conditionally) supported and has sensible semantics.

#include <stdarg.h>
extern "C" void abort();

void *as[5];
int i;

struct A {
  A() { as[i++] = this; }
  A(const A& a) {
    if (&a != as[i-1])
      abort();
    as[i++] = this;
  }
  ~A() {
    if (this != as[--i])
      abort();
  }
};

void f(int i, ...) {
  va_list ap;
  va_start (ap, i);
  A ar = va_arg (ap, A);
}

int main()
{
  f(42,A());
  if (i != 0)
    abort();
}