[PATCH] D50488: [Analyzer] Checker for non-determinism caused by sorting of pointer-like keys

Umann Kristóf via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 10 05:57:07 PDT 2018


Szelethus added a comment.

I'm only a beginner, but here are some things that caught my eye. I really like the idea! :)



================
Comment at: lib/StaticAnalyzer/Checkers/PointerSortingChecker.cpp:28
+
+// PointerSortingVisitor class.
+class PointerSortingVisitor : public StmtVisitor<PointerSortingVisitor> {
----------------
This comment holds little value.


================
Comment at: lib/StaticAnalyzer/Checkers/PointerSortingChecker.cpp:46
+};
+}
+
----------------
` // end of anonymous namespace`


================
Comment at: lib/StaticAnalyzer/Checkers/PointerSortingChecker.cpp:88
+
+  if (!II->getName().equals("sort"))
+    return;
----------------
whisperity wrote:
> Brrr... `equals`. StringRef has a `==` and `!=` operator which accepts string literals on the other side, which would result in a more concise code.
> 
> Also, this heuristic can be applied without extra changes (apart from those mentioned by NoQ and might be mentioned later by others) to other sorting functions, such as `std::stable_sort` and `std::stable_partition`. Perhaps it would be worthy to enable checking those functions too.
Maybe `II->isStr("sort")`?


================
Comment at: lib/StaticAnalyzer/Checkers/PointerSortingChecker.cpp:93
+  const RecordDecl *RD =
+    IterTy->getUnqualifiedDesugaredType()->getAsCXXRecordDecl();
+
----------------
Is there a reason for not directly acquiring the record declaration?


================
Comment at: lib/StaticAnalyzer/Checkers/PointerSortingChecker.cpp:119
+};
+}
+
----------------
` // end of anonymous namespace`


================
Comment at: test/Analysis/ptr-sort.cpp:1
+// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.nondeterminism.PointerSorting %s -analyzer-output=text -verify
+
----------------
Always run the core checkers too.
`-analyzer-checker=core,alpha.nondeterminism.PointerSorting`


Repository:
  rC Clang

https://reviews.llvm.org/D50488





More information about the cfe-commits mailing list