Buggy code:
public class IfStatement extends Statement { public Expression condition ; public Statement thenStatement ; public Statement elseStatement ; boolean thenExit ; int thenInitStateIndex = - 1 ; int elseInitStateIndex = - 1 ; int mergedInitStateIndex = - 1 ; public IfStatement ( Expression condition , Statement thenStatement , int sourceStart , int sourceEnd ) { } public IfStatement ( Expression condition , Statement thenStatement , Statement elseStatement , int sourceStart , int sourceEnd ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { if ( ( ( this . bits ) & ( IsReachableMASK ) ) == 0 ) { return ; } int pc = codeStream . position ; Label endifLabel = new Label ( codeStream ) ; Constant cst ; boolean hasThenPart = ! ( ( ( ( ( cst = this . condition . optimizedBooleanConstant ( ) ) != ( NotAConstant ) ) && ( ( cst . booleanValue ( ) ) == false ) ) || ( ( this . thenStatement ) == null ) ) || ( this . thenStatement . isEmptyBlock ( ) ) ) ; boolean hasElsePart = ! ( ( ( ( cst != ( NotAConstant ) ) && ( ( cst . booleanValue ( ) ) == true ) ) || ( ( this . elseStatement ) == null ) ) || ( this . elseStatement . isEmptyBlock ( ) ) ) ; if ( hasThenPart ) { Label falseLabel ; this . condition . generateOptimizedBoolean ( currentScope , codeStream , null , ( falseLabel = new Label ( codeStream ) ) , true ) ; if ( ( thenInitStateIndex ) != ( - 1 ) ) { codeStream . removeNotDefinitelyAssignedVariables ( currentScope , thenInitStateIndex ) ; codeStream . addDefinitelyAssignedVariables ( currentScope , thenInitStateIndex ) ; } this . thenStatement . generateCode ( currentScope , codeStream ) ; if ( hasElsePart && ( ! ( thenExit ) ) ) { this . thenStatement . branchChainTo ( endifLabel ) ; int position = codeStream . position ; codeStream . goto_ ( endifLabel ) ; <START_BUG> codeStream . updateLastRecordedEndPC ( position ) ; <END_BUG> } falseLabel . place ( ) ; } else { if ( hasElsePart ) { this . condition . generateOptimizedBoolean ( currentScope , codeStream , endifLabel , null , true ) ; } else { this . condition . generateCode ( currentScope , codeStream , false ) ; codeStream . recordPositionsFrom ( pc , this . sourceStart ) ; } } if ( hasElsePart ) { if ( ( elseInitStateIndex ) != ( - 1 ) ) { codeStream . removeNotDefinitelyAssignedVariables ( currentScope , elseInitStateIndex ) ; codeStream . addDefinitelyAssignedVariables ( currentScope , elseInitStateIndex ) ; } this . elseStatement . generateCode ( currentScope , codeStream ) ; } endifLabel . place ( ) ; if ( ( mergedInitStateIndex ) != ( - 1 ) ) { codeStream . removeNotDefinitelyAssignedVariables ( currentScope , mergedInitStateIndex ) ; } codeStream . recordPositionsFrom ( pc , this . sourceStart ) ; } public StringBuffer printStatement ( int indent , StringBuffer output ) { } public void resolve ( BlockScope scope ) { } public void traverse ( ASTVisitor visitor , BlockScope blockScope ) { } }

Fix:
codeStream . updateLastRecordedEndPC ( ( ( this . thenStatement ) instanceof Block ? ( ( Block ) ( this . thenStatement ) ) . scope : currentScope ) , position ) ;