[PATCH] D104285: [analyzer] Retrieve value by direct index from list initialization of constant array declaration.

Denys Petrov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 23 08:44:53 PDT 2021


ASDenysPetrov added a comment.

@chrish_ericsson_atx

Sorry for the late reply. Thank you for reveiwing this.

> I think the presence of the initializer list in the test case is not necessary to trigger the spurious warnings

Could you please provide some test cases that you think will uncover other issues. I'll add them to the test set.

I also have to mention one point of what this patch do more. Consider next:

  int const arr[2][2] = {{1, 2}, {3, 4}}; // global space
  int const *ptr = &arr[0][0];
  ptr[3]; // represented as ConcreteInt(0) 
  arr[1][1]; // represented as reg_$0<int Element{Element{arr,1 S64b,int [2]},1 S64b,int}>

As you can see, now the access through the raw pointer is more presice as through the multi-level indexing. I didn't want to synchronyze those retrieved values both to be `reg_$0`. I've seen a way to handle it more sophisticatedly.
I'm gonna do the same for the multi-level indexing (aka `arr[1][2][3]`).



================
Comment at: clang/lib/AST/Type.cpp:149
+    Extents.push_back(*CAT->getSize().getRawData());
+  } while (CAT = dyn_cast<ConstantArrayType>(CAT->getElementType()));
+  return Extents;
----------------
chrish_ericsson_atx wrote:
> 
+1


================
Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1671
           if (auto CI = R->getIndex().getAs<nonloc::ConcreteInt>()) {
             int64_t i = CI->getValue().getSExtValue();
+            const Expr *E = InitList->getExprForConstArrayByRawIndex(i);
----------------
chrish_ericsson_atx wrote:
> I see where you got the int64_t from -- that's what getSExtValue() returns.  So, if the literal const index value in the expr is greater than LONG_MAX (but less than ULONG_MAX, of course), this would assert.  That seems undesirable....
That's a great catch! I'll make changes soon.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D104285



More information about the cfe-commits mailing list