[PATCH] D53206: Allow padding checker to traverse simple class hierarchies

Ben Craig via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 12 11:21:40 PDT 2018


bcraig added a comment.

You should probably add whoever the current code owner of that static analyzer to this review.  I have very little involvement with Clang these days, so a "LGTM" from me doesn't carry much weight.



================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:155-157
+      if ((CXXRD->field_empty() && CXXRD->getNumBases() != 1) ||
+          CXXRD->getNumBases() != 0)
         return true;
----------------
1. correctness: If CXXRD->getNumBases() returns 1, this will return true, regardless of the emptiness.

2. style: split this into two if statements.  Everything else in this chunk of code _could_ be represented as one massive or-ed together conditional, but instead it uses multiple, back-to-back ifs.  This may not make sense after fixing the correctness bug.


================
Comment at: lib/StaticAnalyzer/Checkers/PaddingChecker.cpp:167-171
     }
+    // How do you reorder fields if you haven't got any?
+    else if (RD->field_empty())
+      return true;
+
----------------
I think this should just be an if, and not an else if.


================
Comment at: test/Analysis/padding_inherit.cpp:2-4
+
+// A class that has no fields and one base class should visit that base class
+// instead.
----------------
Evil test case to add...

```
struct Empty {};
struct DoubleEmpty : Empty {
    Empty e;
};
```

I don't think that should warn, as you can't reduce padding by rearranging element.

I guess your new code shouldn't catch that at all anyway, as you are testing in the other direction.... when field-less inherits from field-ed.



Repository:
  rC Clang

https://reviews.llvm.org/D53206





More information about the cfe-commits mailing list