Program: 88780
Project: 88780
Buggy source:
/** 
 * Adds an edge to the graph, returning false if it was already there. 
 */
public boolean addEdge(Node from,Node to){
  FastHierarchy fh=typeManager.getFastHierarchy();
  boolean ret=false;
  if (from instanceof VarNode) {
    if (to instanceof VarNode) {
      boolean ret1=addToMap(simple,from,to);
      ret1=addToMap(simpleInv,to,from) | ret1;
      if (ret1) {
        edgeQueue.add(from);
        edgeQueue.add(to);
        ret=true;
      }
      if (opts.simple_edges_bidirectional()) {
        boolean ret2=addToMap(simple,to,from);
        ret2=addToMap(simpleInv,from,to) | ret2;
        if (ret2) {
          edgeQueue.add(to);
          edgeQueue.add(from);
          ret=true;
        }
      }
    }
 else {
      if (!(to instanceof FieldRefNode)) {
        throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
      }
      if (!opts.rta()) {
        ret=addToMap(store,from,(FieldRefNode)to) | ret;
        ret=addToMap(storeInv,to,from) | ret;
        if (ret) {
          edgeQueue.add(from);
          edgeQueue.add(to);
        }
      }
    }
  }
 else   if (from instanceof FieldRefNode) {
    if (!opts.rta()) {
      if (!(to instanceof VarNode)) {
        throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
      }
      ret=addToMap(load,from,to) | ret;
      ret=addToMap(loadInv,to,from) | ret;
      if (ret) {
        edgeQueue.add(from);
        edgeQueue.add(to);
      }
    }
  }
 else {
    if (!(from instanceof AllocNode) || !(to instanceof VarNode)) {
      throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
    }
    if (fh == null || to.getType() == null || fh.canStoreType(from.getType(),to.getType())) {
      ret=addToMap(alloc,from,to) | ret;
      ret=addToMap(allocInv,to,from) | ret;
      if (ret) {
        edgeQueue.add(from);
        edgeQueue.add(to);
      }
    }
  }
  return ret;
}

Fixed version (ground truth):
/** 
 * Adds an edge to the graph, returning false if it was already there. 
 */
public boolean addEdge(Node from,Node to){
  FastHierarchy fh=typeManager.getFastHierarchy();
  boolean ret=false;
  from=from.getReplacement();
  to=to.getReplacement();
  if (from instanceof VarNode) {
    if (to instanceof VarNode) {
      boolean ret1=addToMap(simple,from,to);
      ret1=addToMap(simpleInv,to,from) | ret1;
      if (ret1) {
        edgeQueue.add(from);
        edgeQueue.add(to);
        ret=true;
      }
      if (opts.simple_edges_bidirectional()) {
        boolean ret2=addToMap(simple,to,from);
        ret2=addToMap(simpleInv,from,to) | ret2;
        if (ret2) {
          edgeQueue.add(to);
          edgeQueue.add(from);
          ret=true;
        }
      }
    }
 else {
      if (!(to instanceof FieldRefNode)) {
        throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
      }
      if (!opts.rta()) {
        ret=addToMap(store,from,(FieldRefNode)to) | ret;
        ret=addToMap(storeInv,to,from) | ret;
        if (ret) {
          edgeQueue.add(from);
          edgeQueue.add(to);
        }
      }
    }
  }
 else   if (from instanceof FieldRefNode) {
    if (!opts.rta()) {
      if (!(to instanceof VarNode)) {
        throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
      }
      ret=addToMap(load,from,to) | ret;
      ret=addToMap(loadInv,to,from) | ret;
      if (ret) {
        edgeQueue.add(from);
        edgeQueue.add(to);
      }
    }
  }
 else {
    if (!(from instanceof AllocNode) || !(to instanceof VarNode)) {
      throw new RuntimeException("String_Node_Str" + from + "String_Node_Str"+ to);
    }
    if (fh == null || to.getType() == null || fh.canStoreType(from.getType(),to.getType())) {
      ret=addToMap(alloc,from,to) | ret;
      ret=addToMap(allocInv,to,from) | ret;
      if (ret) {
        edgeQueue.add(from);
        edgeQueue.add(to);
      }
    }
  }
  return ret;
}