Program: 135860
Project: 135860
Buggy source:
private static void FixMultiprocess(AST.Multiprocess ast,String context) throws PcalFixIDException {
  for (int i=0; i < ast.decls.size(); i++)   FixVarDecl((AST.VarDecl)ast.decls.elementAt(i),"String_Node_Str");
  Vector procedureNames=new Vector();
  Vector proceduresCalled=new Vector();
  for (int i=0; i < ast.prcds.size(); i++) {
    AST.Procedure prcd=(AST.Procedure)ast.prcds.elementAt(i);
    FixProcedure(prcd,"String_Node_Str");
    procedureNames.addElement(prcd.name);
    proceduresCalled.addElement(prcd.proceduresCalled);
  }
  int n=procedureNames.size();
  boolean path[][]=new boolean[n][];
  for (int i=0; i < n; i++) {
    path[i]=new boolean[n];
    String nm=(String)procedureNames.elementAt(i);
    for (int j=0; j < n; j++) {
      path[i][j]=(-1 != nameToNum(nm,(Vector)proceduresCalled.elementAt(j)));
    }
  }
  for (int k=0; k < n; k++) {
    for (int i=0; i < n; i++) {
      for (int j=0; j < n; j++) {
        path[i][j]=path[i][j] || (path[i][k] && path[k][j]);
      }
    }
  }
  for (int i=0; i < ast.prcds.size(); i++) {
    AST.Procedure prcd=(AST.Procedure)ast.prcds.elementAt(i);
    Vector pCalled=new Vector();
    for (int j=0; j < n; j++) {
      if (path[i][j]) {
        pCalled.addElement(procedureNames.elementAt(j));
      }
    }
    prcd.proceduresCalled=pCalled;
  }
  for (int i=0; i < ast.procs.size(); i++) {
    AST.Process proc=(AST.Process)ast.procs.elementAt(i);
    FixProcess(proc,"String_Node_Str");
    Vector pCalled=proc.proceduresCalled;
    for (int j=0; j < pCalled.size(); j++) {
      String pName=(String)pCalled.elementAt(j);
      int pNum=nameToNum(pName,procedureNames);
      if (pNum == -1) {
        PcalDebug.ReportBug("String_Node_Str" + pName + "String_Node_Str");
      }
      for (int k=0; k < n; k++) {
        if (path[pNum][k]) {
          String callee=(String)procedureNames.elementAt(k);
          if (!InVector(callee,proc.proceduresCalled)) {
            proc.proceduresCalled.addElement(callee);
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
private static void FixMultiprocess(AST.Multiprocess ast,String context) throws PcalFixIDException {
  for (int i=0; i < ast.decls.size(); i++)   FixVarDecl((AST.VarDecl)ast.decls.elementAt(i),"String_Node_Str");
  Vector procedureNames=new Vector();
  Vector proceduresCalled=new Vector();
  for (int i=0; i < ast.prcds.size(); i++) {
    AST.Procedure prcd=(AST.Procedure)ast.prcds.elementAt(i);
    FixProcedure(prcd,"String_Node_Str");
    procedureNames.addElement(prcd.name);
    proceduresCalled.addElement(prcd.proceduresCalled);
  }
  int n=procedureNames.size();
  boolean path[][]=new boolean[n][];
  for (int i=0; i < n; i++) {
    path[i]=new boolean[n];
    for (int j=0; j < n; j++) {
      String nm=(String)procedureNames.elementAt(j);
      path[i][j]=(-1 != nameToNum(nm,(Vector)proceduresCalled.elementAt(i)));
    }
  }
  for (int k=0; k < n; k++) {
    for (int i=0; i < n; i++) {
      for (int j=0; j < n; j++) {
        path[i][j]=path[i][j] || (path[i][k] && path[k][j]);
      }
    }
  }
  for (int i=0; i < ast.prcds.size(); i++) {
    AST.Procedure prcd=(AST.Procedure)ast.prcds.elementAt(i);
    Vector pCalled=new Vector();
    for (int j=0; j < n; j++) {
      if (path[i][j]) {
        pCalled.addElement(procedureNames.elementAt(j));
      }
    }
    prcd.proceduresCalled=pCalled;
  }
  for (int i=0; i < ast.procs.size(); i++) {
    AST.Process proc=(AST.Process)ast.procs.elementAt(i);
    FixProcess(proc,"String_Node_Str");
    Vector pCalled=proc.proceduresCalled;
    for (int j=0; j < pCalled.size(); j++) {
      String pName=(String)pCalled.elementAt(j);
      int pNum=nameToNum(pName,procedureNames);
      if (pNum == -1) {
        PcalDebug.ReportBug("String_Node_Str" + pName + "String_Node_Str");
      }
      for (int k=0; k < n; k++) {
        if (path[pNum][k]) {
          String callee=(String)procedureNames.elementAt(k);
          if (!InVector(callee,proc.proceduresCalled)) {
            proc.proceduresCalled.addElement(callee);
          }
        }
      }
    }
  }
}