[PATCH] D14779: Adding checker to detect excess padding in records

Anna Zaks via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 1 13:35:02 PST 2015


zaks.anna added a comment.

> An analysis of llvm+clang+compiler-rt now only generates 16 excessive padding reports in index.html.


Should those be fixed or are they all false positives?


================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:48
@@ +47,3 @@
+    // The calls to checkAST* from AnalysisConsumer don't end
+    // visit template instantiations or lambda classes.  We
+    // want to visit those, so make our own RecursiveASTVisitor.
----------------
Wording is off here.
Would it be possible to provide a checkAST method that does visit temple instantiations and lambdas? What if another checker wants the same functionality?

================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:70
@@ +69,3 @@
+
+  void visitRecord(const RecordDecl *RD, uint64_t PadMultiplier = 1) const {
+    if (shouldSkipDecl(RD))
----------------
Could you add a comment explaining what is PadMultiplier and why it is needed?

================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:196
@@ +195,3 @@
+    auto LeftFoldFunc =
+        [&ASTContext, &RL](const CharUnitInfo &Old, const CharUnitInfo &New) {
+          CharUnitInfo Retval;
----------------
Is this doing more than just accumulating the padding for every field in the  record? For example, it seems we could do it with a simple loop the does:
  PadSum += Current.Offset - (Prev.Offset + Prev.Size)

================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:213
@@ +212,3 @@
+
+  static CharUnits calculateOptimalPad(const RecordDecl *RD,
+                                       const ASTContext &ASTContext,
----------------
Please, add a high-level description of how optimal pad is calculated.


================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:223
@@ +222,3 @@
+        // In the typical case, this will result in us popping
+        // the back element of the vector, instead of shifting lots
+        // of elements.
----------------
The second comment is unclear. Which vector are you talking about here?

I think it would be better to just move the comments to the places where the action is performed; ex std::sort(Fields.begin(), Fields.end()) in this case.

================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:230
@@ +229,3 @@
+    SmallVector<CharUnitPair, 20> Fields;
+    auto Transformation = [](const FieldDecl *FD) {
+      CharUnitPair RetVal;
----------------
Please, pick a more descriptive name.

================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:249
@@ +248,3 @@
+    CharUnits NewOffset = ASTContext.toCharUnitsFromBits(RL.getFieldOffset(0));
+    CharUnits NewPad;
+
----------------
Is NewPad initialized?


http://reviews.llvm.org/D14779





More information about the cfe-commits mailing list