[PATCH] D111542: [analyzer] Retrieve VLA extent from its redeclaration.

Denys Petrov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 11 08:06:08 PDT 2021


ASDenysPetrov added a comment.

@steakhal 
Thank you for your comments.



================
Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1663
     // We can trust a const value or a value of a global initializer in main().
-    const VarDecl *VD = VR->getDecl();
+    const VarDecl *VD = VR->getDecl()->getMostRecentDecl();
     if (VD->getType().isConstQualified() ||
----------------
steakhal wrote:
> I think you supposed to use the `getCanonicalDecl()` instead.
Using `getCanonicalDecl` does not fix the issue. I've checked.


================
Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1673
+            const QualType T = VD->getType();
+            if (const ConstantArrayType *CAT = Ctx.getAsConstantArrayType(T)) {
+              // Support one-dimensional array.
----------------
steakhal wrote:
> What does the function return if this branch is not taken?
> Shouldn't you handle `IncompleteArrayType` as well?
> What does the function return if this branch is not taken?
In case of a //false// branch it goes down the code to `getBindingForFieldOrElementCommon`.
> Shouldn't you handle `IncompleteArrayType` as well?
Only `ConstantArrayType` has `getSize()` method. And `getMostRecentDecl` give us an `ConstantArrayType` even if it is declared as `IncompleteArrayType`, but `getCanonicalDecl` does not.


================
Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1718
     }
   }
 
----------------
steakhal wrote:
> I would favor not adding another level of indentation xD
It annoys me as well. I could use `goto` but I suppose you won't like it even more.  :-) 


================
Comment at: clang/test/Analysis/initialization.c:101
+
+const int glob_arr3[]; // VLA
+const int glob_arr3[4] = {1, 2, 3};
----------------
steakhal wrote:
> Why is this a VLA? I thought it's just an `IncompleteArrayType`.
> Could you please make sure that this is actually a VLA?
I mixed up in terminilogy. I'll fix it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D111542



More information about the cfe-commits mailing list