Basically catch case such as
shared uint x[4];
x[index] = 0;
which are not currently being detected
Since, unlike SSBO/UBO, shared memory is not "bound" we know anything declared is valid. We could make it simple at first and only check for Arrays and LongVectors having dynamic accesses OOB