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