https://llvm.org/bugs/show_bug.cgi?id=31002
Bug ID: 31002 Summary: clang rejects valid C++ code with variable argument function Product: clang Version: trunk Hardware: PC OS: All Status: NEW Severity: normal Priority: P Component: C++ Assignee: unassignedclangb...@nondot.org Reporter: s...@cs.ucdavis.edu CC: dgre...@apple.com, llvm-bugs@lists.llvm.org Classification: Unclassified It seems to affect all clang versions since at least as early as 3.2.x, and is also incorrectly rejected by ICC. Both GCC and MSVC correctly accept the code. The code is accepted if the destructor is commented out. $ clang++ -v clang version 4.0.0 (trunk 286715) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/clang-trunk/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4.7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.4 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.3 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64 $ $ g++-6.2 small.cpp $ $ clang++ small.cpp small.cpp:12:20: error: second argument to 'va_arg' is of non-POD type 'A' [-Wnon-pod-varargs] A v = va_arg (a, A); ^ /usr/local/clang-trunk/bin/../lib/clang/4.0.0/include/stdarg.h:35:50: note: expanded from macro 'va_arg' #define va_arg(ap, type) __builtin_va_arg(ap, type) ^~~~ small.cpp:19:11: error: cannot pass object of non-POD type 'A' through variadic function; call will abort at runtime [-Wnon-pod-varargs] foo (t, t); ^ 2 errors generated. $ ---------------------------- #include <cstdarg> struct A { virtual ~A () {} }; void foo (A p, ...) { va_list a; va_start (a, p); A v = va_arg (a, A); va_end (a); } int main () { A t; foo (t, t); return 0; } -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs