|
|
|
|
|
by Someone
3757 days ago
|
|
No, it would not. Compilers can remove boundary checks that provably happen after accessing an item of an array, not those before the array is accessed. For your example, the Pascal code (at least, I hope this is Pascal; it has been a while since I wrote any): if (i>=0 and i<16) then
begin
x := a[i]
end
else
begin
ReportError;
end
is equivalent to the C code: if (i>=0 && i<16)
{
if(i>=0 && i<16)
{
x = a[i]
} else {
RuntimeAbort(“Array access outside bounds");
}
} else {
ReportError();
}
A good Pascal compiler, like a good C compiler, would optimise away that second boundary check and the call to RuntimeAbort. Neither compiler is allowed to optimise away the first check. |
|