Program: 85323
Project: 85323
Buggy source:
/** 
 * The starting point of the geometric points-to analysis engine. This function computes the whole program points-to information.
 */
public void solve(){
  long solve_time=0, prepare_time=0;
  long mem;
  int rounds;
  int n_obs;
  G.v().out.flush();
  preprocess();
  mergeLocalVariables();
  worklist.initialize(pointers.size());
  offlineProcessor=new OfflineProcessor(this);
  IFigureManager.cleanCache();
  int evalLevel=opts.geom_eval();
  GeomEvaluator ge=new GeomEvaluator(this,ps);
  if (evalLevel == Constants.eval_basicInfo)   ge.profileSparkBasicMetrics();
  Date begin=new Date();
  for (rounds=0, n_obs=1000; rounds < Parameters.cg_refine_times && n_obs > 0; ++rounds) {
    ps.println("String_Node_Str" + "String_Node_Str" + rounds + "String_Node_Str");
    encodeContexts();
    Date prepare_begin=new Date();
    offlineProcessor.init();
    offlineProcessor.defaultFeedPtsRoutines();
    offlineProcessor.runOptimizations();
    Date prepare_end=new Date();
    prepare_time+=prepare_end.getTime() - prepare_begin.getTime();
    if (rounds == 0) {
      if (evalLevel <= Constants.eval_basicInfo) {
        offlineProcessor.releaseSparkMem();
      }
    }
    prepareNextRun();
    nodeGenerator.initFlowGraph(this);
    solveConstraints();
    n_obs=updateCallGraph();
    finalizeInternalData();
  }
  if (rounds < Parameters.cg_refine_times)   ps.printf("String_Node_Str");
  Date end=new Date();
  solve_time+=end.getTime() - begin.getTime();
  mem=Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
  ps.println();
  ps.printf("String_Node_Str",(double)prepare_time / 1000);
  ps.printf("String_Node_Str",(double)solve_time / 1000);
  ps.printf("String_Node_Str",(double)(mem) / 1024 / 1024);
  if (evalLevel != Constants.eval_nothing) {
    ge.profileGeomBasicMetrics(evalLevel > Constants.eval_basicInfo);
    if (evalLevel > Constants.eval_basicInfo) {
      ge.checkCallGraph();
      ge.checkCastsSafety();
      ge.checkAliasAnalysis();
    }
  }
  finalizeSootData();
  releaseUselessResources();
  hasExecuted=true;
}

Fixed version (ground truth):
/** 
 * The starting point of the geometric points-to analysis engine. This function computes the whole program points-to information.
 */
public void solve(){
  long solve_time=0, prepare_time=0;
  long mem;
  int rounds;
  int n_obs;
  G.v().out.flush();
  preprocess();
  mergeLocalVariables();
  worklist.initialize(pointers.size());
  offlineProcessor=new OfflineProcessor(this);
  IFigureManager.cleanCache();
  int evalLevel=opts.geom_eval();
  GeomEvaluator ge=new GeomEvaluator(this,ps);
  if (evalLevel == Constants.eval_basicInfo)   ge.profileSparkBasicMetrics();
  Date begin=new Date();
  for (rounds=0, n_obs=1000; rounds < Parameters.cg_refine_times && n_obs > 0; ++rounds) {
    ps.println("String_Node_Str" + "String_Node_Str" + rounds + "String_Node_Str");
    encodeContexts(rounds == 0);
    Date prepare_begin=new Date();
    offlineProcessor.init();
    offlineProcessor.defaultFeedPtsRoutines();
    offlineProcessor.runOptimizations();
    Date prepare_end=new Date();
    prepare_time+=prepare_end.getTime() - prepare_begin.getTime();
    if (rounds == 0) {
      if (evalLevel <= Constants.eval_basicInfo) {
        offlineProcessor.releaseSparkMem();
      }
    }
    prepareNextRun();
    nodeGenerator.initFlowGraph(this);
    solveConstraints();
    n_obs=updateCallGraph();
    finalizeInternalData();
  }
  if (rounds < Parameters.cg_refine_times)   ps.printf("String_Node_Str");
  Date end=new Date();
  solve_time+=end.getTime() - begin.getTime();
  mem=Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
  ps.println();
  ps.printf("String_Node_Str",(double)prepare_time / 1000);
  ps.printf("String_Node_Str",(double)solve_time / 1000);
  ps.printf("String_Node_Str",(double)(mem) / 1024 / 1024);
  if (evalLevel != Constants.eval_nothing) {
    ge.profileGeomBasicMetrics(evalLevel > Constants.eval_basicInfo);
    if (evalLevel > Constants.eval_basicInfo) {
      ge.checkCallGraph();
      ge.checkCastsSafety();
      ge.checkAliasAnalysis();
    }
  }
  finalizeSootData();
  releaseUselessResources();
  hasExecuted=true;
}