зеркало из https://github.com/microsoft/clang-1.git
57 строки
1.1 KiB
C++
57 строки
1.1 KiB
C++
// RUN: clang-cc -fsyntax-only -verify -fblocks %s
|
|
|
|
extern char version[];
|
|
|
|
class C {
|
|
public:
|
|
C(int);
|
|
void g(int a, ...);
|
|
static void h(int a, ...);
|
|
};
|
|
|
|
void g(int a, ...);
|
|
|
|
void t1()
|
|
{
|
|
C c(10);
|
|
|
|
g(10, c); // expected-warning{{cannot pass object of non-POD type 'class C' through variadic function; call will abort at runtime}}
|
|
g(10, version);
|
|
}
|
|
|
|
void t2()
|
|
{
|
|
C c(10);
|
|
|
|
c.g(10, c); // expected-warning{{cannot pass object of non-POD type 'class C' through variadic method; call will abort at runtime}}
|
|
c.g(10, version);
|
|
|
|
C::h(10, c); // expected-warning{{cannot pass object of non-POD type 'class C' through variadic function; call will abort at runtime}}
|
|
C::h(10, version);
|
|
}
|
|
|
|
int (^block)(int, ...);
|
|
|
|
void t3()
|
|
{
|
|
C c(10);
|
|
|
|
block(10, c); // expected-warning{{cannot pass object of non-POD type 'class C' through variadic block; call will abort at runtime}}
|
|
block(10, version);
|
|
}
|
|
|
|
class D {
|
|
public:
|
|
void operator() (int a, ...);
|
|
};
|
|
|
|
void t4()
|
|
{
|
|
C c(10);
|
|
|
|
D d;
|
|
|
|
d(10, c); // expected-warning{{Line 48: cannot pass object of non-POD type 'class C' through variadic method; call will abort at runtime}}
|
|
d(10, version);
|
|
}
|