Allow the static assert clang-tidy checker to run over C code.

llvm-svn: 246495
This commit is contained in:
Aaron Ballman 2015-08-31 21:54:42 +00:00
parent f444177d00
commit c0dc76c251
2 changed files with 30 additions and 4 deletions

View File

@ -27,10 +27,9 @@ StaticAssertCheck::StaticAssertCheck(StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context) {}
void StaticAssertCheck::registerMatchers(MatchFinder *Finder) {
// FIXME: I don't see why this checker couldn't also be interesting for
// _Static_assert in C11, or static_assert if <assert.h> has been included,
// but it is currently only enabled for C++11. Investigate.
if (!getLangOpts().CPlusPlus11)
// This checker only makes sense for languages that have static assertion
// capabilities: C++11 and C11.
if (!(getLangOpts().CPlusPlus11 || getLangOpts().C11))
return;
auto IsAlwaysFalse = expr(ignoringParenImpCasts(

View File

@ -0,0 +1,27 @@
// RUN: %python %S/check_clang_tidy.py %s misc-static-assert %t -- -std=c11
// RUN: clang-tidy %s -checks=-*,misc-static-assert -- -std=c99 | count 0
void abort() {}
#ifdef NDEBUG
#define assert(x) 1
#else
#define assert(x) \
if (!(x)) \
abort()
#endif
void f(void) {
int x = 1;
assert(x == 0);
// CHECK-FIXES: {{^ }}assert(x == 0);
#define static_assert(x, msg) _Static_assert(x, msg)
assert(11 == 5 + 6);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
// CHECK-FIXES: {{^ }}static_assert(11 == 5 + 6, "");
#undef static_assert
assert(10 == 5 + 5);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
// CHECK-FIXES: {{^ }}static_assert(10 == 5 + 5, "");
}