// System.out.println("# false=" + tn.getFalseExpr().printNode(0) + " Loc="
// + falseLoc);
- // check if condLoc is higher than trueLoc & falseLoc
- if (!trueLoc.get(0).isTop()
- && !CompositeLattice.isGreaterThan(condLoc, trueLoc, generateErrorMessage(cd, tn))) {
- throw new Error(
- "The location of the condition expression is lower than the true expression at "
- + cd.getSourceFileName() + ":" + tn.getCond().getNumLine());
- }
-
- if (!falseLoc.get(0).isTop()
- && !CompositeLattice.isGreaterThan(condLoc, falseLoc,
- generateErrorMessage(cd, tn.getCond()))) {
- throw new Error(
- "The location of the condition expression is lower than the false expression at "
- + cd.getSourceFileName() + ":" + tn.getCond().getNumLine());
- }
+ // we don't need to check that condLoc is higher than trueLoc & falseLoc
+ // if (!trueLoc.get(0).isTop()
+ // && !CompositeLattice.isGreaterThan(condLoc, trueLoc, generateErrorMessage(cd, tn))) {
+ // throw new Error(
+ // "The location of the condition expression is lower than the true expression at "
+ // + cd.getSourceFileName() + ":" + tn.getCond().getNumLine());
+ // }
+ //
+ // if (!falseLoc.get(0).isTop()
+ // && !CompositeLattice.isGreaterThan(condLoc, falseLoc,
+ // generateErrorMessage(cd, tn.getCond()))) {
+ // throw new Error(
+ // "The location of the condition expression is lower than the false expression at "
+ // + cd.getSourceFileName() + ":" + tn.getCond().getNumLine());
+ // }
// then, return glb of trueLoc & falseLoc
Set<CompositeLocation> glbInputSet = new HashSet<CompositeLocation>();
+ glbInputSet.add(condLoc);
glbInputSet.add(trueLoc);
glbInputSet.add(falseLoc);
if (!argLocation.get(0).isTop()
&& CompositeLattice.compare(argLocation, constraint, true,
- generateErrorMessage(cd, min)) == ComparisonResult.LESS) {
+ generateErrorMessage(cd, min)) == ComparisonResult.GREATER) {
CompositeLocation paramLocation = calleeParamList.get(idx);
+ " paramCompareResult=" + paramCompareResult);
if (!(paramLocation.get(0).equals(calleePCLOC.get(0)) && calleePCLOC.getSize() > 1)
- && paramCompareResult != ComparisonResult.LESS) {
+ && paramCompareResult == ComparisonResult.LESS) {
throw new Error(
- "The program counter location "
- + constraint
- + " is lower than the argument(idx="
+ "The argument(idx="
+ idx
+ ") location "
+ argLocation
+ + "is higher than the caller program counter location "
+ + constraint
+ ". Need to specify that the initial PC location of the callee, which is currently set to "
- + calleePCLOC + ", is lower than " + paramLocation + " in the method "
+ + calleePCLOC + ", is not higher than " + paramLocation + " in the method "
+ calleeMethodDesc.getSymbol() + ":" + min.getNumLine());
}
SymbolTable nametable, ArrayAccessNode aan, CompositeLocation constraint, boolean isLHS) {
System.out.println("aan=" + aan.printNode(0) + " line#=" + aan.getNumLine());
ClassDescriptor cd = md.getClassDesc();
- System.out.println("aan.getExpression()=" +aan.getExpression().getClass());
+ System.out.println("aan.getExpression()=" + aan.getExpression().getClass());
CompositeLocation arrayLoc =
checkLocationFromExpressionNode(md, nametable, aan.getExpression(),
new CompositeLocation(), constraint, isLHS);
-System.out.println("HERE?");
+ System.out.println("HERE?");
// addTypeLocation(aan.getExpression().getType(), arrayLoc);
CompositeLocation indexLoc =
checkLocationFromExpressionNode(md, nametable, aan.getIndex(), new CompositeLocation(),
// addTypeLocation(on.getRight().getType(), rightLoc);
}
- System.out.println("\n# OP NODE=" + on.printNode(0));
- // System.out.println("# left loc=" + leftLoc + " from " +
- // on.getLeft().getClass());
+ // System.out.println("# left loc=" + leftLoc + " from " + on.getLeft().getClass());
// if (on.getRight() != null) {
- // System.out.println("# right loc=" + rightLoc + " from " +
- // on.getRight().getClass());
+ // System.out.println("# right loc=" + rightLoc + " from " + on.getRight().getClass());
// }
Operation op = on.getOp();
} else if (lattice.isGreaterThan(loc1.getLocIdentifier(), loc2.getLocIdentifier())) {
return ComparisonResult.GREATER;
} else {
- return ComparisonResult.LESS;
+ if (lattice.isComparable(loc1.getLocIdentifier(), loc2.getLocIdentifier())) {
+ return ComparisonResult.LESS;
+ } else {
+ return ComparisonResult.INCOMPARABLE;
+ }
}
}
// composite location
int maxTupleSize = 0;
+ int minTupleSize = 0;
CompositeLocation maxCompLoc = null;
Location prevPriorityLoc = null;
maxTupleSize = compLoc.getSize();
maxCompLoc = compLoc;
}
+ if (minTupleSize == 0 || compLoc.getSize() < minTupleSize) {
+ minTupleSize = compLoc.getSize();
+ }
Location priorityLoc = compLoc.get(0);
String priorityLocId = priorityLoc.getLocIdentifier();
priorityLocIdentifierSet.add(priorityLocId);
// in this case, do not take care about delta
// CompositeLocation inputComp = inputSet.iterator().next();
- for (int i = 1; i < maxTupleSize; i++) {
+ // for (int i = 1; i < maxTupleSize; i++) {
+ for (int i = 1; i < minTupleSize; i++) {
glbCompLoc.addLocation(Location.createTopLocation(maxCompLoc.get(i).getDescriptor()));
}
} else {