Buggy code:
public class ExplicitConstructorCall extends Statement implements InvocationSite { public Expression [ ] arguments ; public Expression qualification ; public MethodBinding binding ; protected MethodBinding codegenBinding ; MethodBinding syntheticAccessor ; public int accessMode ; public TypeReference [ ] typeArguments ; public TypeBinding [ ] genericTypeArguments ; public static final int ImplicitSuper = 1 ; public static final int Super = 2 ; public static final int This = 3 ; public VariableBinding [ ] [ ] implicitArguments ; boolean discardEnclosingInstance ; public int typeArgumentsSourceStart ; public ExplicitConstructorCall ( int accessMode ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { } public TypeBinding [ ] genericTypeArguments ( ) { } public boolean isImplicitSuper ( ) { } public boolean isSuperAccess ( ) { } public boolean isTypeAccess ( ) { } void manageEnclosingInstanceAccessIfNecessary ( BlockScope currentScope , FlowInfo flowInfo ) { } public void manageSyntheticAccessIfNecessary ( BlockScope currentScope , FlowInfo flowInfo ) { } public StringBuffer printStatement ( int indent , StringBuffer output ) { } public void resolve ( BlockScope scope ) { MethodScope methodScope = scope . methodScope ( ) ; try { AbstractMethodDeclaration methodDeclaration = methodScope . referenceMethod ( ) ; if ( ( ( methodDeclaration == null ) || ( ! ( methodDeclaration . isConstructor ( ) ) ) ) || ( ( ( ( ConstructorDeclaration ) ( methodDeclaration ) ) . constructorCall ) != ( this ) ) ) { scope . problemReporter ( ) . invalidExplicitConstructorCall ( this ) ; return ; } methodScope . isConstructorCall = true ; ReferenceBinding receiverType = scope . enclosingSourceType ( ) ; if ( ( accessMode ) != ( ExplicitConstructorCall . This ) ) receiverType = receiverType . superclass ( ) ; if ( receiverType == null ) { return ; } if ( ( ( this . accessMode ) == ( ExplicitConstructorCall . Super ) ) && ( ( receiverType . erasure ( ) . id ) == ( TypeIds . T_JavaLangEnum ) ) ) { scope . problemReporter ( ) . cannotInvokeSuperConstructorInEnum ( this , methodScope . referenceMethod ( ) . binding ) ; } if ( ( qualification ) != null ) { if ( ( accessMode ) != ( ExplicitConstructorCall . Super ) ) { scope . problemReporter ( ) . unnecessaryEnclosingInstanceSpecification ( qualification , receiverType ) ; } ReferenceBinding enclosingType = receiverType . enclosingType ( ) ; if ( enclosingType == null ) { scope . problemReporter ( ) . unnecessaryEnclosingInstanceSpecification ( qualification , receiverType ) ; discardEnclosingInstance = true ; } else { TypeBinding qTb = qualification . resolveTypeExpecting ( scope , enclosingType ) ; qualification . computeConversion ( scope , qTb , qTb ) ; } } if ( ( this . typeArguments ) != null ) { int length = this . typeArguments . length ; boolean argHasError = false ; this . genericTypeArguments = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { if ( ( this . genericTypeArguments [ i ] = this . typeArguments [ i ] . resolveType ( scope , true ) ) == null ) { argHasError = true ; } } if ( argHasError ) { return ; } } TypeBinding [ ] argumentTypes = NoParameters ; boolean argsContainCast = false ; if ( ( arguments ) != null ) { boolean argHasError = false ; int length = arguments . length ; argumentTypes = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { Expression argument = this . arguments [ i ] ; if ( argument instanceof CastExpression ) { argument . bits |= ASTNode . DisableUnnecessaryCastCheck ; argsContainCast = true ; } if ( ( argumentTypes [ i ] = argument . resolveType ( scope ) ) == null ) { argHasError = true ; } } if ( argHasError ) { return ; } } else if ( ( receiverType . erasure ( ) . id ) == ( TypeIds . T_JavaLangEnum ) ) { argumentTypes = new TypeBinding [ ] { scope . getJavaLangString ( ) , BaseTypes . IntBinding } ; } if ( ( binding = scope . getConstructor ( receiverType , argumentTypes , this ) ) . isValidBinding ( ) ) { if ( isMethodUseDeprecated ( binding , scope ) ) scope . problemReporter ( ) . deprecatedMethod ( binding , this ) ; ASTNode . checkInvocationArguments ( scope , null , receiverType , binding , this . arguments , argumentTypes , argsContainCast , this ) ; if ( ( binding . isPrivate ( ) ) || ( receiverType . isLocalType ( ) ) ) { <START_BUG> binding . original ( ) . modifiers |= AccLocallyUsed ; <END_BUG> } } else { if ( ( binding . declaringClass ) == null ) binding . declaringClass = receiverType ; scope . problemReporter ( ) . invalidConstructor ( this , binding ) ; } } finally { methodScope . isConstructorCall = false ; } } public void setActualReceiverType ( ReferenceBinding receiverType ) { } public void setDepth ( int depth ) { } public void setFieldIndex ( int depth ) { } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
binding . original ( ) . modifiers |= ExtraCompilerModifiers . AccLocallyUsed ;