[PATCH] D77305: [Analyzer][VLASize] Support multi-dimensional arrays.

Kristóf Umann via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 6 03:45:36 PDT 2020


Szelethus added a comment.

It would be great to see a test about properly setting the arrays extent. Otherwise LGTM.



================
Comment at: clang/lib/StaticAnalyzer/Checkers/VLASizeChecker.cpp:61
+  // warned about that already.
+  // FIXME: report bug?
+  if (SizeV.isUnknown())
----------------
Hmm, why would we? The size is most probably unknown to us.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/VLASizeChecker.cpp:162-172
+  const VariableArrayType *VLALast = nullptr;
+  while (VLA) {
+    const Expr *SizeE = VLA->getSizeExpr();
+    State = checkVLASize(C, State, SizeE);
+    if (!State)
+      return;
+    SizeExpr.push_back(SizeE);
----------------
Ahaa, so if we have a `vla[x][y][a][b]` variable, `VLALast` would be `vla[x]`, which allows you to get the actual element type. Could you explain that (maybe even with a small example like this) in the code?


================
Comment at: clang/lib/StaticAnalyzer/Checkers/VLASizeChecker.cpp:194-196
+      // Binary operation not created, return with the current state set.
+      C.addTransition(State);
       return;
----------------
How about 
```
We were not able to determine extent of the array, return with the original state.
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77305/new/

https://reviews.llvm.org/D77305





More information about the cfe-commits mailing list