continue;
}
}
- } else {
+ } else if(currfopn.getRight()!=null && (currfopn.getOp().getOp() == Operation.SUB)) {
+ for(Enumeration ecld = child_prefetch_set_copy.keys();ecld.hasMoreElements();) {
+ PrefetchPair childpp = (PrefetchPair) ecld.nextElement();
+ if(childpp.containsTemp(currfopn.getDest())) {
+ child_prefetch_set_copy.remove(childpp);
+ }
+ }
+ } else {
//FIXME Is not taken care of for cases like x = -y followed by a[x].i
}
for(int j=0;j<id.tddesc.size();j++) {
indexcheck+=generateTemp(fm, id.getTempDescAt(j), lb)+"+";
}
- indexcheck+=id.offset+">0)&&(tmpindex<((struct ArrayObject *)prefptr)->___length___)";
+ indexcheck+=id.offset+">=0)&&(tmpindex<((struct ArrayObject *)prefptr)->___length___)";
if (!teststr.equals(""))
teststr+="&&";
- teststr+="prefptr="+basestr+"&&"+indexcheck;
- basestr="((void **)(((char *) &(((struct ArrayObject*)prefptr)->___length___))+sizeof(int)))[tmpindex])";
+ teststr+="(((prefptr="+basestr+")!= NULL) &&"+indexcheck;
+ basestr="((void **)(((char *) &(((struct ArrayObject*)prefptr)->___length___))+sizeof(int)))[tmpindex]";
maybenull=true;
lasttype=lasttype.dereference();
}
if (teststr.equals("")) {
oid="((unsigned int)"+basestr+")";
} else {
- oid="((unsigned int)("+teststr+")?"+basestr+":NULL)";
+ oid="(unsigned int)("+teststr+")?"+basestr+":NULL)";
}
oids.add(oid);