Buggy code:
public abstract class AbstractMethodDeclaration extends AstNode implements ReferenceContext , ProblemSeverities { public MethodScope scope ; public char [ ] selector ; public int declarationSourceStart ; public int declarationSourceEnd ; public int modifiers ; public int modifiersSourceStart ; public Argument [ ] arguments ; public TypeReference [ ] thrownExceptions ; public Statement [ ] statements ; public int explicitDeclarations ; public MethodBinding binding ; public boolean ignoreFurtherInvestigation = false ; public boolean needFreeReturn = false ; public int bodyStart ; public int bodyEnd = - 1 ; public CompilationResult compilationResult ; AbstractMethodDeclaration ( CompilationResult compilationResult ) { } public void abort ( int abortLevel ) { } public void analyseCode ( ClassScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void bindArguments ( ) { } public void bindThrownExceptions ( ) { } public CompilationResult compilationResult ( ) { } public void generateCode ( ClassScope classScope , ClassFile classFile ) { } private void generateCode ( ClassFile classFile ) { classFile . generateMethodInfoHeader ( binding ) ; int methodAttributeOffset = classFile . contentsOffset ; int attributeNumber = classFile . generateMethodInfoAttribute ( binding ) ; if ( ( ! ( binding . isNative ( ) ) ) && ( ! ( binding . isAbstract ( ) ) ) ) { int codeAttributeOffset = classFile . contentsOffset ; classFile . generateCodeAttributeHeader ( ) ; CodeStream codeStream = classFile . codeStream ; codeStream . reset ( this , classFile ) ; scope . computeLocalVariablePositions ( ( binding . isStatic ( ) ? 0 : 1 ) , codeStream ) ; if ( ( arguments ) != null ) { for ( int i = 0 , max = arguments . length ; i < max ; i ++ ) { LocalVariableBinding argBinding ; codeStream . addVisibleLocalVariable ( ( argBinding = arguments [ i ] . binding ) ) ; argBinding . recordInitializationStartPC ( 0 ) ; } } if ( ( statements ) != null ) { for ( int i = 0 , max = statements . length ; i < max ; i ++ ) statements [ i ] . generateCode ( scope , codeStream ) ; } if ( needFreeReturn ) { codeStream . return_ ( ) ; } codeStream . exitUserScope ( scope ) ; <START_BUG> codeStream . recordPositionsFrom ( 0 , this . sourceStart ) ; <END_BUG> classFile . completeCodeAttribute ( codeAttributeOffset ) ; attributeNumber ++ ; } classFile . completeMethodInfo ( methodAttributeOffset , attributeNumber ) ; if ( ignoreFurtherInvestigation ) { throw new org . eclipse . jdt . internal . compiler . problem . AbortMethod ( scope . referenceCompilationUnit ( ) . compilationResult ) ; } } public boolean hasErrors ( ) { } public boolean isAbstract ( ) { } public boolean isClinit ( ) { } public boolean isConstructor ( ) { } public boolean isDefaultConstructor ( ) { } public boolean isInitializationMethod ( ) { } public boolean isNative ( ) { } public boolean isStatic ( ) { } public abstract void parseStatements ( Parser parser , CompilationUnitDeclaration unit ) { } public void resolve ( ClassScope upperScope ) { } public void resolveStatements ( ClassScope upperScope ) { } public String returnTypeToString ( int tab ) { } public void tagAsHavingErrors ( ) { } public String toString ( int tab ) { } public String toStringStatements ( int tab ) { } public void traverse ( IAbstractSyntaxTreeVisitor visitor , ClassScope classScope ) { } }

Fix:
codeStream . recordPositionsFrom ( 0 , this . bodyEnd ) ;