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