Buggy code:
private PrintStream icOutput ; private Block currBlock ( ) { } public STCMiddleEnd ( Logger logger , PrintStream icOutput , ForeignFunctions foreignFuncs ) { } private void initDefaults ( ) { } public void optimize ( ) throws UserException { } public void regenerate ( CompilerBackend backend ) throws UserException { } public void requirePackage ( RequiredPackage pkg ) { } public void defineStructType ( StructType newType ) { } public void declareWorkType ( WorkContext workType ) { } public void defineBuiltinFunction ( String name , FunctionType fType , LocalForeignFunction localImpl , WrappedForeignFunction wrappedImpl ) throws UserException { } public void startFunction ( String functionName , List < Var > oList , List < Var > iList , ExecTarget mode ) throws UserException { } public void endFunction ( ) { } public void startNestedBlock ( ) { } public void endNestedBlock ( ) { } public void addComment ( String comment ) { } public void startIfStatement ( Arg condition , boolean hasElse ) { } public void startElseBlock ( ) { } public void endIfStatement ( ) { } public void startWaitStatement ( String procName , List < Var > waitVars , WaitMode mode , boolean explicit , boolean recursive , ExecTarget target ) { } public void startWaitStatement ( String procName , List < Var > waitVars , WaitMode mode , boolean explicit , boolean recursive , ExecTarget target , TaskProps props ) { } public void startWaitStatement ( String procName , List < WaitVar > waitVars , WaitMode mode , boolean recursive , ExecTarget target , TaskProps props ) { } public void endWaitStatement ( ) { } public void startSwitch ( Arg switchVar , List < Integer > caseLabels , boolean hasDefault ) { } public void endCase ( ) { } public void endSwitch ( ) { } public void startForeachLoop ( String loopName , Var container , Var memberVar , Var loopCountVar , int splitDegree , int leafDegree , boolean arrayClosed ) { } public void endForeachLoop ( ) { } public void startRangeLoop ( String loopName , Var loopVar , Var countVar , Arg start , Arg end , Arg increment , int desiredUnroll , int splitDegree , int leafDegree ) { } public void endRangeLoop ( ) { } public void startLoop ( String loopName , List < Var > loopVars , List < Boolean > definedHere , List < Arg > initVals , List < Boolean > blockingVars ) { } public void loopContinue ( List < Arg > newVals , List < Boolean > blockingVars ) { } public void loopBreak ( ) { } public void endLoop ( ) { } public void startAsyncExec ( String procName , AsyncExecutor executor , String cmdName , List < Var > taskOutputs , List < Arg > taskArgs , Map < String , Arg > taskProps , boolean hasSideEffects ) { } public void endAsyncExec ( ) { } public void declare ( Var var ) throws UndefinedTypeException { } public void builtinFunctionCall ( String functionName , String frontendName , List < Var > inputs , List < Var > outputs ) { } public void builtinFunctionCall ( String functionName , String frontendName , List < Var > inputs , List < Var > outputs , TaskProps props ) { } public void builtinLocalFunctionCall ( String functionName , String frontendName , List < Arg > inputs , List < Var > outputs ) { } public void functionCall ( String functionName , String frontendName , List < Arg > inputs , List < Var > outputs , ExecTarget mode , TaskProps props ) { } public void runExternal ( String cmd , List < Arg > args , List < Arg > inFiles , List < Var > outFiles , Redirects < Arg > redirects , boolean hasSideEffects , boolean deterministic ) { } public void initLocalOutFile ( Var localOutFile , Arg fileName , Var fileFuture ) { } public void arrayRetrieve ( Var dst , Var arrayVar , Arg arrIx ) { <START_BUG> currBlock ( ) . addInstruction ( TurbineOp . arrayRetrieve ( dst , arrayVar , arrIx , ZERO ) ) ; <END_BUG> } public void arrayCreateAlias ( Var dst , Var arrayVar , Arg arrIx ) { } public void arrayCopyOutImm ( Var dst , Var arrayVar , Arg arrIx ) { } public void arrayCopyOutFuture ( Var dst , Var arrayVar , Var indexVar ) { } public void arrayRefCopyOutImm ( Var dst , Var arrayVar , Arg arrIx ) { } public void arrayRefCopyOutFuture ( Var dst , Var arrayVar , Var indexVar ) { } public void arrayStore ( Var array , Arg ix , Arg member ) { } public void arrayStoreFuture ( Var array , Var ixVar , Arg member ) { } public void arrayRefStoreImm ( Var array , Arg ix , Arg member ) { } public void arrayRefStoreFuture ( Var array , Var ixVar , Arg member ) { } public void arrayCopyInImm ( Var array , Arg ix , Var member ) { } public void arrayCopyInFuture ( Var array , Var ix , Var member ) { } public void arrayRefCopyInImm ( Var array , Arg ix , Var member ) { } public void arrayRefCopyInFuture ( Var array , Var ix , Var member ) { } public void arrayBuild ( Var array , List < Arg > keys , List < Var > vals ) { } public void arrayCreateNestedFuture ( Var result , Var array , Var ix ) { } public void arrayCreateNestedImm ( Var result , Var arrayVar , Arg arrIx ) { } public void arrayRefCreateNestedImm ( Var result , Var array , Arg ix ) { } public void arrayRefCreateNestedFuture ( Var result , Var array , Var ix ) { } public void asyncCopy ( Var dst , Var src ) { } public void syncCopy ( Var dst , Var src ) { }

Fix:
currBlock ( ) . addInstruction ( TurbineOp . arrayRetrieve ( dst , arrayVar , arrIx ) ) ;