WALA/com.ibm.wala.core.testdata/src/arraybounds/NotInBound.java

81 lines
1.6 KiB
Java

package arraybounds;
/**
*
* All array accesses in the following class are necessary and they will be
* detected correctly by the array bounds analysis.
*
* @author Stephan Gocht {@code <stephan@gobro.de>}
*
*/
public class NotInBound {
public int phiOverwrite(int[] arr, boolean condition) {
if (arr.length > 0) {
int l = arr.length;
if (condition) {
l = 5;
}
return arr[l - 1];
} else {
throw new IllegalArgumentException();
}
}
public void offByOne(int[] arr) {
for (int i = 0; i <= arr.length; i++) {
arr[i] = 0;
}
}
public int unknownLength(int[] arr) {
return arr[4];
}
public int ambiguity(int[] arr1, int[] arr2, int i) {
int[] arr = arr2;
if (0 <= i && i < arr.length) {
arr = arr1;
return arr[i];
} else {
throw new IllegalArgumentException();
}
}
public int innerLoop(int[] arr) {
int sum = 0;
int i = 0;
while (i < arr.length) {
while (i < 6) {
i++;
sum += arr[i];
}
}
return sum;
}
public int comparedWrong(int[] arr, int index) {
if (index > 0 && index > arr.length) {
return arr[index];
} else {
throw new IllegalArgumentException();
}
}
public int nonTrackedOperationIsSafe(int[] arr, int index) {
if (index > 0 && index > arr.length) {
return arr[2*index];
} else {
throw new IllegalArgumentException();
}
}
public int unboundNegativeLoop(int[] arr, int index) {
int sum = 0;
for (int i = 5; i < arr.length; i--) {
sum += arr[i];
}
return sum;
}
}