diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-09-29 23:06:57 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-09-29 23:06:57 +0000 |
commit | d9dd4d29b7dee9035f1379af467f3366c4ca0bd1 (patch) | |
tree | 8baae709e9767945dee708c6a119f06f26c9de18 /clang/lib/Sema/SemaExpr.cpp | |
parent | b166d45730e1d32bca8c03482034222c42314693 (diff) | |
download | bcm5719-llvm-d9dd4d29b7dee9035f1379af467f3366c4ca0bd1.tar.gz bcm5719-llvm-d9dd4d29b7dee9035f1379af467f3366c4ca0bd1.zip |
Don't trap when passing non-POD arguments to variadic functions in MS-compatibility mode
Clang warns (treated as error by default, but still ignored in system headers)
when passing non-POD arguments to variadic functions, and generates a trap
instruction to crash the program if that code is ever run.
Unfortunately, MSVC happily generates code for such calls without a warning,
and there is code in system headers that use it.
This makes Clang not insert the trap instruction when in -fms-compatibility
mode, while still generating the warning/error message.
Differential Revision: http://reviews.llvm.org/D5492
llvm-svn: 218640
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 5edabc03b69..0c7cb2e6df1 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -800,6 +800,9 @@ Sema::VarArgKind Sema::isValidVarArgType(const QualType &Ty) { if (Ty->isObjCObjectType()) return VAK_Invalid; + if (getLangOpts().MSVCCompat) + return VAK_MSVCUndefined; + // FIXME: In C++11, these cases are conditionally-supported, meaning we're // permitted to reject them. We should consider doing so. return VAK_Undefined; @@ -829,6 +832,7 @@ void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) { break; case VAK_Undefined: + case VAK_MSVCUndefined: DiagRuntimeBehavior( E->getLocStart(), nullptr, PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) |