[PATCH] D76996: [analyzer] Improve PlacementNewChecker
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 31 02:42:56 PDT 2020
martong accepted this revision.
martong added a comment.
This revision is now accepted and ready to land.
LGTM! Thanks! But I am not that confident with the element regions and field regions, so @NoQ could you please take another look?
================
Comment at: clang/lib/StaticAnalyzer/Checkers/CheckPlacementNew.cpp:82
CharUnits TypeSize = AstContext.getTypeSizeInChars(ElementType);
- if (NE->isArray()) {
+ if (IsArray = NE->isArray()) {
const Expr *SizeExpr = *NE->getArraySize();
----------------
This will break build-bots that run with -Werror.
```
../../git/llvm-project/clang/lib/StaticAnalyzer/Checkers/CheckPlacementNew.cpp:82:15: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (IsArray = NE->isArray()) {
```
================
Comment at: clang/test/Analysis/placement-new.cpp:256
+
+void f9() {
+ struct X {
----------------
First I was wondering if we indeed handle correctly structs with nested arrays whose element's type is a structs with nested arrays (... and so on).
So, I tried the below test, and it seems okay. Thus I think it might be worth to add something similar to it.
```
void f9_1() {
struct Y {
char a;
alignas(alignof(short)) char b[20];
};
struct X {
char e;
Y f[20];
} Xi; // expected-note {{'Xi' initialized here}}
// ok 2(custom align) + 6*1(index '6' offset)
::new (&Xi.f[6].b[6]) long;
// bad 2(custom align) + 1*1(index '1' offset)
::new (&Xi.f[1].b[1]) long; // expected-warning{{Storage type is aligned to 3 bytes but allocated type is aligned to 8 bytes}} expected-note 1 {{}}
}
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76996/new/
https://reviews.llvm.org/D76996
More information about the cfe-commits
mailing list