diff options
author | Etienne Bergeron <etienneb@google.com> | 2016-04-26 17:30:30 +0000 |
---|---|---|
committer | Etienne Bergeron <etienneb@google.com> | 2016-04-26 17:30:30 +0000 |
commit | bda187decd34572c8bf601f9ca4928cb0e880606 (patch) | |
tree | b99d311103cf4f16036c3d2aafd0f78949587e17 /clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h | |
parent | 71515e57f9597cd79a920b01c1646b704557d2b6 (diff) | |
download | bcm5719-llvm-bda187decd34572c8bf601f9ca4928cb0e880606.tar.gz bcm5719-llvm-bda187decd34572c8bf601f9ca4928cb0e880606.zip |
[clang-tidy] New checker for redundant expressions.
Summary:
This checker finds redundant expression on both side of a binary operator.
The current implementation provide a function to check whether expressions
are equivalent. This implementation is able to recognize the common
subset encounter in C++ program. Side-effects like "x++" are not considered
to be equivalent.
There are many False Positives related to macros and to floating point
computations (detecting NaN). The checker is ignoring these cases.
Example:
```
if( !dst || dst->depth != desired_depth ||
dst->nChannels != desired_num_channels ||
dst_size.width != src_size.width ||
dst_size.height != dst_size.height ) <<--- bug
{
```
Reviewers: alexfh
Subscribers: danielmarjamaki, fahlgren, jordan_rose, zaks.anna, Eugene.Zelenko, cfe-commits
Differential Revision: http://reviews.llvm.org/D19451
llvm-svn: 267574
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h')
-rw-r--r-- | clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h b/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h new file mode 100644 index 00000000000..80460a63d09 --- /dev/null +++ b/clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.h @@ -0,0 +1,35 @@ +//===--- RedundantExpressionCheck.h - clang-tidy-----------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_REDUNDANT_EXPRESSION_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_REDUNDANT_EXPRESSION_H + +#include "../ClangTidy.h" + +namespace clang { +namespace tidy { +namespace misc { + +/// Detect useless or suspicious redundant expressions. +/// +/// For the user-facing documentation see: +/// http://clang.llvm.org/extra/clang-tidy/checks/misc-redundant-expression.html +class RedundantExpressionCheck : public ClangTidyCheck { +public: + RedundantExpressionCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; +}; + +} // namespace misc +} // namespace tidy +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_REDUNDANT_EXPRESSION_H |