[PATCH] D54757: [clang-tidy] new check: bugprone-branch-clone

DonĂ¡t Nagy via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 28 08:35:08 PST 2018


donat.nagy marked 3 inline comments as done.
donat.nagy added a comment.

**AstDiff:**

I looked at the AstDiff library, but I think that it is overkill for my goals. The main feat of the AstDiff library is analyzing and presenting the differences between two AST subtrees, while this checker only needs a simple yes/no answer for "Are these branches identical?".

**Macros:**

The current implementation of the check only looks at the preprocessed code, therefore it detects the situations where the duplication is created by macros. I added some tests to highlight this behavior. I think that in some situations this would be useful for detecting redundant or incorrect parts of macro-infected code.



================
Comment at: clang-tidy/bugprone/BranchCloneCheck.cpp:31
+/// an if/else if/else chain is one statement (which may be a CompoundStmt).
+using SwitchBranch = llvm::SmallVector<const Stmt *, 2>;
+} // anonymous namespace
----------------
JonasToth wrote:
> maybe plural for the typename would fit better, as its a vector of multiple elements?
This type represents one branch in a switch statement (which consists of multiple statements). I cannot think of a descriptive, short name which also happens to be plural and I do not want to use a monstrosity like `StatementsInSwitchBranch`.

By the way, can anyone think of shorter, but still clear names for `areStatementsIdentical()` and `areSwitchBranchesIdentical()` ?


================
Comment at: clang-tidy/bugprone/BranchCloneCheck.cpp:187
+    while (FamilyBegin < End) {
+      auto FamilyEnd = FamilyBegin + 1;
+      while (FamilyEnd < End &&
----------------
JonasToth wrote:
> i think the name `FamilyEnd` is not very descriptive, maybe `SubsequentBranch` or so?
I have renamed FamilyBegin/FamilyEnd to BeginCurrent/EndCurrent. I kept `begin` and `end` in the names to emphasize that this is is an iterator range (and altered the comment to include the expression "iterator range"). Is this naming choice clear enough?


================
Comment at: test/clang-tidy/bugprone-branch-clone.cpp:200
+
+void test_macro1(int in, int &out) {
+  PASTE_CODE(
----------------
The tests for macro handling start here.


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54757/new/

https://reviews.llvm.org/D54757





More information about the cfe-commits mailing list