Program: 75263
Project: 75263
Buggy source:
private void _collectConstraints(SootClass entityClass,boolean debug){
  if (debug)   System.out.println("String_Node_Str" + entityClass);
  for (Iterator fields=entityClass.getFields().iterator(); fields.hasNext(); ) {
    SootField field=(SootField)fields.next();
    Type type=field.getType();
    _createInequalityTerm(debug,field,type,_objectToInequalityTerm);
    TypeTag tag=(TypeTag)field.getTag("String_Node_Str");
    if (tag != null) {
      _addInequality(debug,_solver,new ConstantTerm(tag.getType(),field),(InequalityTerm)_objectToInequalityTerm.get(field));
    }
  }
  SootClass modelClass=ModelTransformer.getModelClass();
  if (modelClass != null) {
    for (Iterator fields=modelClass.getFields().iterator(); fields.hasNext(); ) {
      SootField field=(SootField)fields.next();
      Type type=field.getType();
      _createInequalityTerm(debug,field,type,_objectToInequalityTerm);
      TypeTag tag=(TypeTag)field.getTag("String_Node_Str");
      if (tag != null) {
        _addInequality(debug,_solver,new ConstantTerm(tag.getType(),field),(InequalityTerm)_objectToInequalityTerm.get(field));
      }
    }
  }
  for (Iterator methods=entityClass.getMethods().iterator(); methods.hasNext(); ) {
    SootMethod method=(SootMethod)methods.next();
    Body body=method.retrieveActiveBody();
    if (debug)     System.out.println("String_Node_Str" + method);
    CompleteUnitGraph unitGraph=new CompleteUnitGraph(body);
    SimpleLocalDefs localDefs=new SimpleLocalDefs(unitGraph);
    SimpleLocalUses localUses=new SimpleLocalUses(unitGraph,localDefs);
    for (Iterator locals=body.getLocals().iterator(); locals.hasNext(); ) {
      Local local=(Local)locals.next();
      if (_unsafeLocals.contains(local)) {
        continue;
      }
      Type type=local.getType();
      _createInequalityTerm(debug,local,type,_objectToInequalityTerm);
    }
    for (Iterator units=body.getUnits().iterator(); units.hasNext(); ) {
      Stmt stmt=(Stmt)units.next();
      if (debug)       System.out.println("String_Node_Str" + stmt);
      if (stmt instanceof AssignStmt) {
        Value leftOp=((AssignStmt)stmt).getLeftOp();
        Value rightOp=((AssignStmt)stmt).getRightOp();
        InequalityTerm leftOpTerm=_getInequalityTerm(method,debug,leftOp,_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
        InequalityTerm rightOpTerm=_getInequalityTerm(method,debug,rightOp,_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
        _addInequality(debug,_solver,rightOpTerm,leftOpTerm);
        if (SootUtilities.isAliasableValue(leftOp) && SootUtilities.isAliasableValue(rightOp)) {
          _addInequality(debug,_solver,leftOpTerm,rightOpTerm);
        }
      }
 else       if (stmt instanceof InvokeStmt) {
        _getInequalityTerm(method,debug,((InvokeStmt)stmt).getInvokeExpr(),_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
      }
    }
  }
}

Fixed version (ground truth):
private void _collectConstraints(SootClass entityClass,boolean debug){
  if (debug)   System.out.println("String_Node_Str" + entityClass);
  for (Iterator methods=entityClass.getMethods().iterator(); methods.hasNext(); ) {
    SootMethod method=(SootMethod)methods.next();
    Body body=method.retrieveActiveBody();
    if (debug)     System.out.println("String_Node_Str" + method);
    CompleteUnitGraph unitGraph=new CompleteUnitGraph(body);
    SimpleLocalDefs localDefs=new SimpleLocalDefs(unitGraph);
    SimpleLocalUses localUses=new SimpleLocalUses(unitGraph,localDefs);
    for (Iterator locals=body.getLocals().iterator(); locals.hasNext(); ) {
      Local local=(Local)locals.next();
      if (_unsafeLocals.contains(local)) {
        continue;
      }
      Type type=local.getType();
      _createInequalityTerm(debug,local,type,_objectToInequalityTerm);
    }
    for (Iterator units=body.getUnits().iterator(); units.hasNext(); ) {
      Stmt stmt=(Stmt)units.next();
      if (debug)       System.out.println("String_Node_Str" + stmt);
      if (stmt instanceof AssignStmt) {
        Value leftOp=((AssignStmt)stmt).getLeftOp();
        Value rightOp=((AssignStmt)stmt).getRightOp();
        InequalityTerm leftOpTerm=_getInequalityTerm(method,debug,leftOp,_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
        InequalityTerm rightOpTerm=_getInequalityTerm(method,debug,rightOp,_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
        _addInequality(debug,_solver,rightOpTerm,leftOpTerm);
        if (SootUtilities.isAliasableValue(leftOp) && SootUtilities.isAliasableValue(rightOp)) {
          _addInequality(debug,_solver,leftOpTerm,rightOpTerm);
        }
      }
 else       if (stmt instanceof InvokeStmt) {
        _getInequalityTerm(method,debug,((InvokeStmt)stmt).getInvokeExpr(),_solver,_objectToInequalityTerm,stmt,localDefs,localUses);
      }
    }
  }
}