Fix the point that we didn't take into account array's dimension. Retrieve a value of global constant array by iterating through its initializer list.
Example:
const int arr[4] = {1, 2}; const int *ptr = arr; int x0 = ptr[0]; // 1 int x1 = ptr[1]; // 2 int x2 = ptr[2]; // 0 int x3 = ptr[3]; // 0 int x4 = ptr[4]; // UB
Fixes: https://bugs.llvm.org/show_bug.cgi?id=50604
TODO: Support multidimensional arrays as well:
const int arr[4][2] = {1, 2}; const int *ptr = arr[0]; int x0 = ptr[0]; // 1 int x1 = ptr[1]; // 2 int x2 = ptr[2]; // UB int x3 = ptr[3]; // UB int x4 = ptr[4]; // UB
const VarDecl *VD = VR->getDecl()->getCanonicalDecl();