[analyzer] Teach CloneDetector to find clones that look like copy-paste errors.
authorArtem Dergachev <artem.dergachev@gmail.com>
Thu, 18 Aug 2016 12:29:41 +0000 (12:29 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Thu, 18 Aug 2016 12:29:41 +0000 (12:29 +0000)
commit2fc1985db3ea6f60156d9fb4b969cc05636586c0
tree51d22ed27605cae6babf6d64c0e8d2b34beec03d
parent75de707d84d23c94d34a0379fb032dfd52024484
[analyzer] Teach CloneDetector to find clones that look like copy-paste errors.

The original clone checker tries to find copy-pasted code that is exactly
identical to the original code, up to minor details.

As an example, if the copy-pasted code has all references to variable 'a'
replaced with references to variable 'b', it is still considered to be
an exact clone.

The new check finds copy-pasted code in which exactly one variable seems
out of place compared to the original code, which likely indicates
a copy-paste error (a variable was forgotten to be renamed in one place).

Patch by Raphael Isemann!

Differential Revision: https://reviews.llvm.org/D23314

llvm-svn: 279056
clang/include/clang/Analysis/CloneDetection.h
clang/lib/Analysis/CloneDetection.cpp
clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp
clang/test/Analysis/copypaste/suspicious-clones.cpp [new file with mode: 0644]