Buggy code:
public class MethodScope extends BlockScope { public ReferenceContext referenceContext ; public boolean isStatic ; public boolean isConstructorCall = false ; public FieldBinding initializedField ; public int lastVisibleFieldID = - 1 ; public int analysisIndex ; public boolean isPropagatingInnerClassEmulation ; public int lastIndex = 0 ; public long [ ] definiteInits = new long [ 4 ] ; public long [ ] [ ] extraDefiniteInits = new long [ 4 ] [ ] ; public boolean insideTypeAnnotation = false ; public SyntheticArgumentBinding [ ] extraSyntheticArguments ; public MethodScope ( ClassScope parent , ReferenceContext context , boolean isStatic ) { } private void checkAndSetModifiersForConstructor ( MethodBinding methodBinding ) { } private void checkAndSetModifiersForMethod ( MethodBinding methodBinding ) { } public void computeLocalVariablePositions ( int initOffset , CodeStream codeStream ) { boolean isReportingUnusedArgument = false ; if ( ( referenceContext ) instanceof AbstractMethodDeclaration ) { AbstractMethodDeclaration methodDecl = ( ( AbstractMethodDeclaration ) ( referenceContext ) ) ; MethodBinding method = methodDecl . binding ; if ( ! ( ( ( ( method . isAbstract ( ) ) || ( ( method . isImplementing ( ) ) && ( ! ( compilerOptions ( ) . reportUnusedParameterWhenImplementingAbstract ) ) ) ) || ( ( ( method . isOverriding ( ) ) && ( ! ( method . isImplementing ( ) ) ) ) && ( ! ( compilerOptions ( ) . reportUnusedParameterWhenOverridingConcrete ) ) ) ) || ( method . isMain ( ) ) ) ) { isReportingUnusedArgument = true ; } } this . offset = initOffset ; this . maxOffset = initOffset ; int ilocal = 0 ; int maxLocals = this . localIndex ; while ( ilocal < maxLocals ) { LocalVariableBinding local = locals [ ilocal ] ; if ( ( local == null ) || ( ! ( local . isArgument ) ) ) break ; <START_BUG> if ( ( isReportingUnusedArgument && ( ( local . useFlag ) == ( LocalVariableBinding . UNUSED ) ) ) && ( ( ( local . declaration . bits ) & ( IsLocalDeclarationReachableMASK ) ) != 0 ) ) { <END_BUG> this . problemReporter ( ) . unusedArgument ( local . declaration ) ; } codeStream . record ( local ) ; local . resolvedPosition = this . offset ; if ( ( ( local . type ) == ( LongBinding ) ) || ( ( local . type ) == ( DoubleBinding ) ) ) { this . offset += 2 ; } else { ( this . offset ) ++ ; } if ( ( this . offset ) > 255 ) { this . problemReporter ( ) . noMoreAvailableSpaceForArgument ( local , local . declaration ) ; } ilocal ++ ; } if ( ( extraSyntheticArguments ) != null ) { for ( int iarg = 0 , maxArguments = extraSyntheticArguments . length ; iarg < maxArguments ; iarg ++ ) { SyntheticArgumentBinding argument = extraSyntheticArguments [ iarg ] ; argument . resolvedPosition = this . offset ; if ( ( ( argument . type ) == ( LongBinding ) ) || ( ( argument . type ) == ( DoubleBinding ) ) ) { this . offset += 2 ; } else { ( this . offset ) ++ ; } if ( ( this . offset ) > 255 ) { this . problemReporter ( ) . noMoreAvailableSpaceForArgument ( argument , ( ( ASTNode ) ( this . referenceContext ) ) ) ; } } } this . computeLocalVariablePositions ( ilocal , this . offset , codeStream ) ; } MethodBinding createMethod ( AbstractMethodDeclaration method ) { } public FieldBinding findField ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite , boolean needResolve ) { } public boolean isInsideConstructor ( ) { } public boolean isInsideInitializer ( ) { } public boolean isInsideInitializerOrConstructor ( ) { } public ProblemReporter problemReporter ( ) { } public final int recordInitializationStates ( FlowInfo flowInfo ) { } public AbstractMethodDeclaration referenceMethod ( ) { } public TypeDeclaration referenceType ( ) { } String basicToString ( int tab ) { } }

Fix:
if ( ( isReportingUnusedArgument && ( ( local . useFlag ) == ( LocalVariableBinding . UNUSED ) ) ) && ( ( ( local . declaration . bits ) & ( ASTNode . IsLocalDeclarationReachable ) ) != 0 ) ) {