[PATCH] D20795: Added basic capabilities to detect source code clones.

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 22 01:37:24 PDT 2016


NoQ added a comment.

Regarding the cache stack - it feels easier for me to allocate a separate stack for each statement, and put the stack on stack (!) rather than having it global. This way it'd be automatically cleaned for you when VisitStmt() exits, and you'd be able to address child cache by index rather then through scanning.


================
Comment at: lib/Analysis/CloneDetection.cpp:142
@@ +141,3 @@
+/// Afterwards, the hash values of the children are calculated into the
+/// computed hash value.
+class HashVisitor : public RecursiveASTVisitor<HashVisitor> {
----------------
> This calculation happens in linear time and each statement is only visited a
> fixed amount of times during this process.

Isn't `SaveAllSubSequences()` quadratic?

================
Comment at: lib/Analysis/CloneDetection.cpp:424
@@ +423,3 @@
+  // remove any duplicates.
+  std::sort(IndexesToRemove.begin(), IndexesToRemove.end(),
+            std::greater<unsigned>());
----------------
I suspect that all //i//'s that make it into the `IndexesToRemove` vector are already unique and increasing, by construction. We take some //i//, see if we need to remove it, then push it at most once and take (//i// + 1).


https://reviews.llvm.org/D20795





More information about the cfe-commits mailing list