Buggy code:
public class FlowContext implements TypeConstants { public static final FlowContext NotContinuableContext = new FlowContext ( null , null ) ; public ASTNode associatedNode ; public FlowContext parent ; public NullInfoRegistry initsOnFinally ; public int tagBits ; public static final int DEFER_NULL_DIAGNOSTIC = 1 ; public static final int PREEMPT_NULL_DIAGNOSTIC = 2 ; public static final int HIDE_NULL_COMPARISON_WARNING = 4 ; public static final int CAN_ONLY_NULL_NON_NULL = 0 ; public static final int CAN_ONLY_NULL = 1 ; public static final int CAN_ONLY_NON_NULL = 2 ; public static final int MAY_NULL = 3 ; public static final int CHECK_MASK = 255 ; public static final int IN_COMPARISON_NULL = 256 ; public static final int IN_COMPARISON_NON_NULL = 512 ; public static final int IN_ASSIGNMENT = 768 ; public static final int IN_INSTANCEOF = 1024 ; public static final int CONTEXT_MASK = ~ ( FlowContext . CHECK_MASK ) ; public FlowContext ( FlowContext parent , ASTNode associatedNode ) { } public BranchLabel breakLabel ( ) { } public void checkExceptionHandlers ( TypeBinding raisedException , ASTNode location , FlowInfo flowInfo , BlockScope scope ) { } public void checkExceptionHandlers ( TypeBinding [ ] raisedExceptions , ASTNode location , FlowInfo flowInfo , BlockScope scope ) { } public BranchLabel continueLabel ( ) { } public FlowInfo getInitsForFinalBlankInitializationCheck ( TypeBinding declaringType , FlowInfo flowInfo ) { } public FlowContext getTargetContextForBreakLabel ( char [ ] labelName ) { } public FlowContext getTargetContextForContinueLabel ( char [ ] labelName ) { } public FlowContext getTargetContextForDefaultBreak ( ) { } public FlowContext getTargetContextForDefaultContinue ( ) { } public String individualToString ( ) { } public FlowInfo initsOnBreak ( ) { } public UnconditionalFlowInfo initsOnReturn ( ) { } public boolean isBreakable ( ) { } public boolean isContinuable ( ) { } public boolean isNonReturningContext ( ) { } public boolean isSubRoutine ( ) { } public char [ ] labelName ( ) { } public void recordBreakFrom ( FlowInfo flowInfo ) { } public void recordBreakTo ( FlowContext targetContext ) { } public void recordContinueFrom ( FlowContext innerFlowContext , FlowInfo flowInfo ) { } protected boolean recordFinalAssignment ( VariableBinding variable , Reference finalReference ) { } protected void recordNullReference ( LocalVariableBinding local , Expression expression , int status ) { } public void recordReturnFrom ( UnconditionalFlowInfo flowInfo ) { } public void recordSettingFinal ( VariableBinding variable , Reference finalReference , FlowInfo flowInfo ) { <START_BUG> if ( ( ( flowInfo . tagBits ) & ( FlowInfo . UNREACHABLE ) ) == 0 ) { <END_BUG> FlowContext context = this ; while ( context != null ) { if ( ! ( context . recordFinalAssignment ( variable , finalReference ) ) ) { break ; } context = context . parent ; } } } public void recordUsingNullReference ( Scope scope , LocalVariableBinding local , Expression reference , int checkType , FlowInfo flowInfo ) { } void removeFinalAssignmentIfAny ( Reference reference ) { } public SubRoutineStatement subroutine ( ) { } public String toString ( ) { } }

Fix:
if ( ( ( flowInfo . tagBits ) & ( FlowInfo . UNREACHABLE_OR_DEAD ) ) == 0 ) {