view gcc/testsuite/g++.dg/ext/varargs1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

// 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();
}