17a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier// RUN: %clang_cc1 -fsyntax-only -verify -fblocks %s -Wno-error=non-pod-varargs
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -fblocks -std=c++98 %s -Wno-error=non-pod-varargs
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -fblocks -std=c++11 %s -Wno-error=non-pod-varargs
4906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// Check that the warning is still there under -fms-compatibility.
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -fsyntax-only -verify -fblocks %s -Wno-error=non-pod-varargs -fms-compatibility
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -fblocks -std=c++98 %s -Wno-error=non-pod-varargs -fms-compatibility
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -fblocks -std=c++11 %s -Wno-error=non-pod-varargs -fms-compatibility
9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
10dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlssonextern char version[];
11dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson
12906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonclass C {
13906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonpublic:
14906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  C(int);
15906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  void g(int a, ...);
16906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  static void h(int a, ...);
17906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson};
18906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
19906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonvoid g(int a, ...);
20906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
21906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonvoid t1()
22906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson{
23906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  C c(10);
24906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  g(10, c);
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
30dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson  g(10, version);
31f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu
32f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  void (*ptr)(int, ...) = g;
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  ptr(10, c);
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
38f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  ptr(10, version);
39906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson}
40906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
41906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonvoid t2()
42906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson{
43906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  C c(10);
44906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  c.g(10, c);
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime}}
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
50dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson  c.g(10, version);
51f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu
52f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  void (C::*ptr)(int, ...) = &C::g;
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  (c.*ptr)(10, c);
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime}}
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
58f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  (c.*ptr)(10, version);
59f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  C::h(10, c);
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
65dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson  C::h(10, version);
66f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu
67f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  void (*static_ptr)(int, ...) = &C::h;
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  static_ptr(10, c);
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
73f462b0152f10eed0b989b07bcf457b6fb0d83bdbRichard Trieu  static_ptr(10, version);
74906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson}
75906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
76906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonint (^block)(int, ...);
77906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
78906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonvoid t3()
79906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson{
80906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  C c(10);
81906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  block(10, c);
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic block; call will abort at runtime}}
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
87dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson  block(10, version);
88906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson}
89906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
90906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonclass D {
91906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonpublic:
92906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  void operator() (int a, ...);
93906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson};
94906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
95906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlssonvoid t4()
96906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson{
97906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  C c(10);
98906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
99906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson  D d;
100906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  d(10, c);
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime}}
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
106dce5e2cabf07ff25eb4d9e1859c0a21c69f588d2Anders Carlsson  d(10, version);
107906fed0fb54a338961aba3aa54802b7d68de94c7Anders Carlsson}
108d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson
109d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlssonclass E {
110930a9abb7eb171d706c9e17a27bbcd267f0d9b3dDouglas Gregor  E(int, ...); // expected-note 2{{implicitly declared private here}}
111d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson};
112d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson
113d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlssonvoid t5()
114d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson{
115d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson  C c(10);
116d74d4149f759b8abec15fb8163a4206e8c7068c8Anders Carlsson
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  E e(10, c);
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic constructor; call will abort at runtime}}
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-error@-4 {{calling a private constructor of class 'E'}}
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  (void)E(10, c);
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic constructor; call will abort at runtime}}
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-error@-4 {{calling a private constructor of class 'E'}}
127930a9abb7eb171d706c9e17a27bbcd267f0d9b3dDouglas Gregor
1284fcfde4d5c8f25e40720972a5543d538a0dcb220Daniel Dunbar}
12975b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor
13075b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor// PR5761: unevaluated operands and the non-POD warning
13175b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregorclass Foo {
13275b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor public:
13375b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor  Foo() {}
13475b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor};
13575b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregor
13675b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregorint Helper(...);
13775b699a883ed02e9183cb5f4ad7086f4e3c6adf1Douglas Gregorconst int size = sizeof(Helper(Foo()));
13806d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor
13906d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregornamespace std {
14006d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor  class type_info { };
14106d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor}
14206d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor
14306d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregorstruct Base { virtual ~Base(); };
14406d33699f11277a494c1118a0d25a83dab3bbd4cDouglas GregorBase &get_base(...);
14506d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregorint eat_base(...);
14606d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor
14706d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregorvoid test_typeid(Base &base) {
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  (void)typeid(get_base(base));
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'Base' through variadic function; call will abort at runtime}}
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-4 {{cannot pass object of non-trivial type 'Base' through variadic function; call will abort at runtime}}
1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-6 {{expression with side effects will be evaluated despite being used as an operand to 'typeid'}}
15506d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor  (void)typeid(eat_base(base)); // okay
15606d33699f11277a494c1118a0d25a83dab3bbd4cDouglas Gregor}
157403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner
158403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner
159403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner// rdar://7985267 - Shouldn't warn, doesn't actually use __builtin_va_start is
160403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner// magic.
161403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner
162403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattnervoid t6(Foo somearg, ... ) {
1634bb3bf98704c98d2953381b484a9127f0909678fChris Lattner  __builtin_va_list list;
1644bb3bf98704c98d2953381b484a9127f0909678fChris Lattner  __builtin_va_start(list, somearg);
165403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner}
166403783337fc06ce46bc2adeb7f09e0c0471f758eChris Lattner
1670adde128d96a73864569516e684faa570e3c0333David Majnemervoid t7(int n, ...) {
1680adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_list list;
1690adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_start(list, n);
1700adde128d96a73864569516e684faa570e3c0333David Majnemer  (void)__builtin_va_arg(list, C); // expected-warning{{second argument to 'va_arg' is of non-POD type 'C'}}
1710adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_end(list);
1720adde128d96a73864569516e684faa570e3c0333David Majnemer}
1730adde128d96a73864569516e684faa570e3c0333David Majnemer
1740adde128d96a73864569516e684faa570e3c0333David Majnemerstruct Abstract {
1750adde128d96a73864569516e684faa570e3c0333David Majnemer  virtual void doit() = 0; // expected-note{{unimplemented pure virtual method}}
1760adde128d96a73864569516e684faa570e3c0333David Majnemer};
1770adde128d96a73864569516e684faa570e3c0333David Majnemer
1780adde128d96a73864569516e684faa570e3c0333David Majnemervoid t8(int n, ...) {
1790adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_list list;
1800adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_start(list, n);
1810adde128d96a73864569516e684faa570e3c0333David Majnemer  (void)__builtin_va_arg(list, Abstract); // expected-error{{second argument to 'va_arg' is of abstract type 'Abstract'}}
1820adde128d96a73864569516e684faa570e3c0333David Majnemer  __builtin_va_end(list);
1830adde128d96a73864569516e684faa570e3c0333David Majnemer}
18471b8fb5d4233420d2ed2f150a54ea61431bd8684Eli Friedman
18571b8fb5d4233420d2ed2f150a54ea61431bd8684Eli Friedmanint t9(int n) {
18671b8fb5d4233420d2ed2f150a54ea61431bd8684Eli Friedman  // Make sure the error works in potentially-evaluated sizeof
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return (int)sizeof(*(Helper(Foo()), (int (*)[n])0));
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // expected-warning@-2 {{cannot pass object of non-POD type 'Foo' through variadic function; call will abort at runtime}}
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
19171b8fb5d4233420d2ed2f150a54ea61431bd8684Eli Friedman}
1922edcde8747a000113b434a5c88b4648beed4197bEli Friedman
1932edcde8747a000113b434a5c88b4648beed4197bEli Friedman// PR14057
1942edcde8747a000113b434a5c88b4648beed4197bEli Friedmannamespace t10 {
1952edcde8747a000113b434a5c88b4648beed4197bEli Friedman  struct F {
1962edcde8747a000113b434a5c88b4648beed4197bEli Friedman    F();
1972edcde8747a000113b434a5c88b4648beed4197bEli Friedman  };
1982edcde8747a000113b434a5c88b4648beed4197bEli Friedman
1992edcde8747a000113b434a5c88b4648beed4197bEli Friedman  struct S {
2002edcde8747a000113b434a5c88b4648beed4197bEli Friedman    void operator()(F, ...);
2012edcde8747a000113b434a5c88b4648beed4197bEli Friedman  };
2022edcde8747a000113b434a5c88b4648beed4197bEli Friedman
2032edcde8747a000113b434a5c88b4648beed4197bEli Friedman  void foo() {
2042edcde8747a000113b434a5c88b4648beed4197bEli Friedman    S s;
2052edcde8747a000113b434a5c88b4648beed4197bEli Friedman    F f;
2062edcde8747a000113b434a5c88b4648beed4197bEli Friedman    s.operator()(f);
2072edcde8747a000113b434a5c88b4648beed4197bEli Friedman    s(f);
2082edcde8747a000113b434a5c88b4648beed4197bEli Friedman  }
2092edcde8747a000113b434a5c88b4648beed4197bEli Friedman}
2100538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2110538f0e9200df56974b5a71bc276dbce456e9781Richard Trieunamespace t11 {
2120538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  typedef void(*function_ptr)(int, ...);
2130538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  typedef void(C::*member_ptr)(int, ...);
2140538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  typedef void(^block_ptr)(int, ...);
2150538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2160538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  function_ptr get_f_ptr();
2170538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  member_ptr get_m_ptr();
2180538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  block_ptr get_b_ptr();
2190538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2200538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  function_ptr arr_f_ptr[5];
2210538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  member_ptr arr_m_ptr[5];
2220538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  block_ptr arr_b_ptr[5];
2230538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2240538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  void test() {
2250538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    C c(10);
2260538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (get_f_ptr())(10, c);
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2310538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (get_f_ptr())(10, version);
2320538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (c.*get_m_ptr())(10, c);
2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime}}
2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2370538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (c.*get_m_ptr())(10, version);
2380538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (get_b_ptr())(10, c);
2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic block; call will abort at runtime}}
2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2440538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (get_b_ptr())(10, version);
2450538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (arr_f_ptr[3])(10, c);
2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic function; call will abort at runtime}}
2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2510538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (arr_f_ptr[3])(10, version);
2520538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (c.*arr_m_ptr[3])(10, c);
2544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime}}
2564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2580538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (c.*arr_m_ptr[3])(10, version);
2590538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu
2604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    (arr_b_ptr[3])(10, c);
2614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L
2624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // expected-warning@-2 {{cannot pass object of non-POD type 'C' through variadic block; call will abort at runtime}}
2634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2640538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu    (arr_b_ptr[3])(10, version);
2650538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu  }
2660538f0e9200df56974b5a71bc276dbce456e9781Richard Trieu}
267