Buggy code:
public void ldc ( TypeBinding typeBinding ) { } public void ldc2_w ( double constant ) { } public void ldc2_w ( long constant ) { } public void ldcForIndex ( int index , char [ ] constant ) { } public void ldiv ( ) { } public void lload ( int iArg ) { } public void lload_0 ( ) { } public void lload_1 ( ) { } public void lload_2 ( ) { } public void lload_3 ( ) { } public void lmul ( ) { } public void lneg ( ) { } public final void load ( LocalVariableBinding localBinding ) { } public final void load ( TypeBinding typeBinding , int resolvedPosition ) { } public void lookupswitch ( CaseLabel defaultLabel , int [ ] keys , int [ ] sortedIndexes , CaseLabel [ ] casesLabel ) { } public void lor ( ) { } public void lrem ( ) { } public void lreturn ( ) { } public void lshl ( ) { } public void lshr ( ) { } public void lstore ( int iArg ) { } public void lstore_0 ( ) { } public void lstore_1 ( ) { } public void lstore_2 ( ) { } public void lstore_3 ( ) { } public void lsub ( ) { } public void lushr ( ) { } public void lxor ( ) { } public void monitorenter ( ) { } public void monitorexit ( ) { } public void multianewarray ( TypeBinding typeBinding , int dimensions ) { } public void new_ ( TypeBinding typeBinding ) { } public void newarray ( int array_Type ) { } public void newArray ( ArrayBinding arrayBinding ) { } public void newJavaLangAssertionError ( ) { } public void newJavaLangError ( ) { } public void newNoClassDefFoundError ( ) { } public void newStringContatenation ( ) { } public void newWrapperFor ( int typeID ) { } public void nop ( ) { } public void optimizeBranch ( int oldPosition , BranchLabel lbl ) { } public void pop ( ) { } public void pop2 ( ) { } public void pushOnStack ( TypeBinding binding ) { } public void putfield ( FieldBinding fieldBinding ) { } public void putstatic ( FieldBinding fieldBinding ) { } public void record ( LocalVariableBinding local ) { } public void recordExpressionType ( TypeBinding typeBinding ) { } public void recordPositionsFrom ( int startPC , int sourcePos ) { } public void recordPositionsFrom ( int startPC , int sourcePos , boolean widen ) { if ( ( ( ( ( this . generateAttributes ) & ( ClassFileConstants . ATTR_LINES ) ) == 0 ) || ( sourcePos == 0 ) ) || ( ( startPC == ( position ) ) && ( ! widen ) ) ) return ; if ( ( ( pcToSourceMapSize ) + 4 ) > ( pcToSourceMap . length ) ) { System . arraycopy ( pcToSourceMap , 0 , ( pcToSourceMap = new int [ ( pcToSourceMapSize ) << 1 ] ) , 0 , pcToSourceMapSize ) ; } <START_BUG> int lineNumber = org . eclipse . jdt . internal . compiler . util . Util . searchLineNumber ( lineSeparatorPositions , sourcePos ) ; <END_BUG> if ( ( pcToSourceMapSize ) > 0 ) { if ( ( pcToSourceMap [ ( ( pcToSourceMapSize ) - 1 ) ] ) != lineNumber ) { if ( startPC <= ( lastEntryPC ) ) { int insertionIndex = CodeStream . insertionIndex ( pcToSourceMap , pcToSourceMapSize , startPC ) ; if ( insertionIndex != ( - 1 ) ) { int existingEntryIndex = indexOfSameLineEntrySincePC ( startPC , lineNumber ) ; if ( existingEntryIndex != ( - 1 ) ) { pcToSourceMap [ existingEntryIndex ] = startPC ; } else if ( ( insertionIndex < 1 ) || ( ( pcToSourceMap [ ( insertionIndex - 1 ) ] ) != lineNumber ) ) { System . arraycopy ( pcToSourceMap , insertionIndex , pcToSourceMap , ( insertionIndex + 2 ) , ( ( pcToSourceMapSize ) - insertionIndex ) ) ; pcToSourceMap [ ( insertionIndex ++ ) ] = startPC ; pcToSourceMap [ insertionIndex ] = lineNumber ; pcToSourceMapSize += 2 ; } } else if ( ( position ) != ( lastEntryPC ) ) { if ( ( ( lastEntryPC ) == startPC ) || ( ( lastEntryPC ) == ( pcToSourceMap [ ( ( pcToSourceMapSize ) - 2 ) ] ) ) ) { pcToSourceMap [ ( ( pcToSourceMapSize ) - 1 ) ] = lineNumber ; } else { pcToSourceMap [ ( ( pcToSourceMapSize ) ++ ) ] = lastEntryPC ; pcToSourceMap [ ( ( pcToSourceMapSize ) ++ ) ] = lineNumber ; } } else if ( ( ( pcToSourceMap [ ( ( pcToSourceMapSize ) - 1 ) ] ) < lineNumber ) && widen ) { pcToSourceMap [ ( ( pcToSourceMapSize ) - 1 ) ] = lineNumber ; } } else { pcToSourceMap [ ( ( pcToSourceMapSize ) ++ ) ] = startPC ; pcToSourceMap [ ( ( pcToSourceMapSize ) ++ ) ] = lineNumber ; } } else { if ( startPC < ( pcToSourceMap [ ( ( pcToSourceMapSize ) - 2 ) ] ) ) { int insertionIndex = CodeStream . insertionIndex ( pcToSourceMap , pcToSourceMapSize , startPC ) ; if ( insertionIndex != ( - 1 ) ) { if ( ! ( ( insertionIndex > 1 ) && ( ( pcToSourceMap [ ( insertionIndex - 1 ) ] ) == lineNumber ) ) ) { if ( ( ( pcToSourceMapSize ) > 4 ) && ( ( pcToSourceMap [ ( ( pcToSourceMapSize ) - 4 ) ] ) > startPC ) ) { System . arraycopy ( pcToSourceMap , insertionIndex , pcToSourceMap , ( insertionIndex + 2 ) , ( ( ( pcToSourceMapSize ) - 2 ) - insertionIndex ) ) ; pcToSourceMap [ ( insertionIndex ++ ) ] = startPC ;

Fix:
int lineNumber = Util . getLineNumber ( sourcePos , lineSeparatorPositions , 0 , ( ( lineSeparatorPositions . length ) - 1 ) ) ;