NagyDonat wrote:

Since suggesting that "matrix" testcase I realized that it won't work, because 
`ArrayBoundV2` doesn't perform bounds checking for the lower-dimensional 
sub-arrays of a multidimensional array (it only checks that the accessed memory 
location is within the full array). For example in `int matrix[10][10];` it 
reports that `matrix[1][200]` overflows the bounds of "matrix", but doesn't 
report `matrix[1][50]`. I tried to eliminate this limitation, but that patch 
had to be reverted because the meaning of `ElementRegion` is ambiguous.

Due to this limitation, it's a bit difficult to ensure that `ArrayBoundV2` 
calls `getDescriptiveName()` on an `ElementRegion`, but I think adding a 
`FieldRegion` layer should work:
```
struct {
  int numbers[10];
} table[100];
int func(int x, int y) {
  int tmp = x;
  x = y;
  y = tmp;
  return table[x].numbers[-1]; 
}
```
Here I expect that the checker would (incorrectly) report something like 
`Access of 'table[y].numbers' at negative byte offset`.


https://github.com/llvm/llvm-project/pull/85104
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to