Program: 32408
Project: 32408
Buggy source:
ST genUpdateCode(ST code){
  ST ifUpdated=tmplGroup.getInstanceOf("String_Node_Str");
  if (headT instanceof DeltaTable) {
    code.add("String_Node_Str",isUpdatedVar() + "String_Node_Str");
    return code;
  }
  String headTableSlice=headTableVar();
  if (isTableSliced(headT)) {
    String sliceIdx;
    if (updateFromRemoteHeadT()) {
      sliceIdx=sliceIdxGetter(headT,headP.first());
    }
 else     if (Analysis.updateParallelShard(rule,tableMap)) {
      sliceIdx=firstTableIdx();
    }
 else {
      sliceIdx=sliceIdxGetter(headT,headP.first());
    }
    if (headT instanceof PrivateTable)     headTableSlice=privateHeadTableGetter(headT,sliceIdx);
 else     headTableSlice+="String_Node_Str" + sliceIdx + "String_Node_Str";
  }
  String _headTable="String_Node_Str";
  code.add("String_Node_Str",headT.className() + "String_Node_Str" + _headTable+ "String_Node_Str"+ headTableSlice);
  if (priorTestForMinMax())   genPriorTestForMinMax(code,_headTable);
  if (headTableLockAtEnd()) {
    int column=headTableWriteLockColumn();
    Object param=headP.getAllParamsExpanded()[column];
    ST if_=tmplGroup.getInstanceOf("String_Node_Str");
    if_.add("String_Node_Str",isUpdatedVar());
    if_.add("String_Node_Str",ifUpdated);
    ST withLock, withLock2;
    if (useArrayTableLock()) {
      String arrayIndex="String_Node_Str" + param + "String_Node_Str"+ sliceMapVar()+ "String_Node_Str"+ headT.id()+ "String_Node_Str";
      withLock=CodeGen.withArrayLock(lockMapVar(),headT.id(),arrayIndex);
      withLock2=CodeGen.withArrayLock(lockMapVar(),headT.id(),arrayIndex);
      withLock.add("String_Node_Str",if_);
      withLock2.add("String_Node_Str",if_);
    }
 else {
      withLock=CodeGen.withLock(lockMapVar(),headT.id(),sliceIdxGetter(headT,column,param));
      withLock2=CodeGen.withLock(lockMapVar(),headT.id(),sliceIdxGetter(headT,column,param));
      withLock.add("String_Node_Str",if_);
      withLock2.add("String_Node_Str",if_);
    }
    code.add("String_Node_Str",withLock);
    code=withLock;
  }
  if (headP.hasFunctionParam()) {
    genAggrCode(code,_headTable,ifUpdated);
  }
 else   genInsertCode(code,_headTable,ifUpdated);
  return ifUpdated;
}

Fixed version (ground truth):
ST genUpdateCode(ST code){
  ST ifUpdated=tmplGroup.getInstanceOf("String_Node_Str");
  if (headT instanceof DeltaTable) {
    code.add("String_Node_Str",isUpdatedVar() + "String_Node_Str");
    return code;
  }
  String headTableSlice=headTableVar();
  if (isTableSliced(headT)) {
    String sliceIdx;
    if (updateFromRemoteHeadT()) {
      sliceIdx=sliceIdxGetter(headT,headP.first());
    }
 else     if (Analysis.updateParallelShard(rule,tableMap)) {
      sliceIdx=firstTableIdx();
    }
 else {
      sliceIdx=sliceIdxGetter(headT,headP.first());
    }
    if (headT instanceof PrivateTable)     headTableSlice=privateHeadTableGetter(headT,sliceIdx);
 else     headTableSlice+="String_Node_Str" + sliceIdx + "String_Node_Str";
  }
  String _headTable="String_Node_Str";
  code.add("String_Node_Str",headT.className() + "String_Node_Str" + _headTable+ "String_Node_Str"+ headTableSlice);
  if (priorTestForMinMax())   genPriorTestForMinMax(code,_headTable);
  ST prevCode=code;
  if (headTableLockAtEnd()) {
    int column=headTableWriteLockColumn();
    Object param=headP.getAllParamsExpanded()[column];
    ST withLock, withLock2;
    if (useArrayTableLock()) {
      String arrayIndex="String_Node_Str" + param + "String_Node_Str"+ sliceMapVar()+ "String_Node_Str"+ headT.id()+ "String_Node_Str";
      withLock=CodeGen.withArrayLock(lockMapVar(),headT.id(),arrayIndex);
      withLock2=CodeGen.withArrayLock(lockMapVar(),headT.id(),arrayIndex);
    }
 else {
      withLock=CodeGen.withLock(lockMapVar(),headT.id(),sliceIdxGetter(headT,column,param));
      withLock2=CodeGen.withLock(lockMapVar(),headT.id(),sliceIdxGetter(headT,column,param));
    }
    code.add("String_Node_Str",withLock);
    code=withLock;
  }
  if (headP.hasFunctionParam()) {
    genAggrCode(code,_headTable,ifUpdated);
  }
 else   genInsertCode(code,_headTable,ifUpdated);
  ST if_=tmplGroup.getInstanceOf("String_Node_Str");
  if_.add("String_Node_Str",isUpdatedVar());
  if_.add("String_Node_Str",ifUpdated);
  prevCode.add("String_Node_Str",if_);
  return ifUpdated;
}