diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2015-10-07 15:14:10 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2015-10-07 15:14:10 +0000 |
| commit | fd3a3b3f291cb93d6779a0c0670a43d97579ab99 (patch) | |
| tree | 6dd3d2e0b5c68c08396e335a2f4b9d8dde4f3d7c | |
| parent | fcc7f6622fed1b6574f2828042811daf3e061627 (diff) | |
| download | bcm5719-llvm-fd3a3b3f291cb93d6779a0c0670a43d97579ab99.tar.gz bcm5719-llvm-fd3a3b3f291cb93d6779a0c0670a43d97579ab99.zip | |
Loosening the restriction on variadic function definitions so that extern "C" function definitions are permissible.
llvm-svn: 249555
| -rw-r--r-- | clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp | 9 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/cert-variadic-function-def.cpp | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp b/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp index ac788a3aee5..a5f8fa7e733 100644 --- a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp +++ b/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp @@ -20,9 +20,12 @@ void VariadicFunctionDefCheck::registerMatchers(MatchFinder *Finder) { if (!getLangOpts().CPlusPlus) return; - // We only care about function *definitions* that are variadic. - Finder->addMatcher(functionDecl(isDefinition(), isVariadic()).bind("func"), - this); + // We only care about function *definitions* that are variadic, and do not + // have extern "C" language linkage. + Finder->addMatcher( + functionDecl(isDefinition(), isVariadic(), unless(isExternC())) + .bind("func"), + this); } void VariadicFunctionDefCheck::check(const MatchFinder::MatchResult &Result) { diff --git a/clang-tools-extra/test/clang-tidy/cert-variadic-function-def.cpp b/clang-tools-extra/test/clang-tidy/cert-variadic-function-def.cpp index 6bb6b1371b8..2c1420b9e36 100644 --- a/clang-tools-extra/test/clang-tidy/cert-variadic-function-def.cpp +++ b/clang-tools-extra/test/clang-tidy/cert-variadic-function-def.cpp @@ -16,3 +16,9 @@ struct S { void f1(int, ...) {} // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: do not define a C-style variadic function; consider using a function parameter pack or currying instead }; + +// Function definitions that are extern "C" are good. +extern "C" void f4(int, ...) {} // ok +extern "C" { + void f5(int, ...) {} // ok +} |

