Buggy code:
public class BcelPerClauseAspectAdder extends BcelTypeMunger { private Kind kind ; private boolean hasGeneratedInner = false ; public BcelPerClauseAspectAdder ( ResolvedType aspect , PerClause . Kind kind ) { } public boolean munge ( BcelClassWeaver weaver ) { } public boolean forceMunge ( LazyClassGen gen , boolean checkAlreadyThere ) { } private void doAggressiveInner ( LazyClassGen gen ) { } private boolean doMunge ( LazyClassGen gen , boolean checkAlreadyThere ) { } public ResolvedMember getMatchingSyntheticMember ( Member member ) { } public ResolvedMember getSignature ( ) { } public boolean matches ( ResolvedType onType ) { } private boolean hasPerClauseMembersAlready ( LazyClassGen classGen ) { } private void generatePerClauseMembers ( LazyClassGen classGen ) { } private void generatePerSingletonAspectOfMethod ( LazyClassGen classGen ) { } private void generatePerSingletonHasAspectMethod ( LazyClassGen classGen ) { } private void generatePerSingletonAjcClinitMethod ( LazyClassGen classGen ) { InstructionFactory factory = classGen . getFactory ( ) ; LazyMethodGen method = makeMethodGen ( classGen , AjcMemberMaker . ajcPostClinitMethod ( aspectType ) ) ; BcelPerClauseAspectAdder . flagAsSynthetic ( method , true ) ; classGen . addMethodGen ( method ) ; InstructionList il = method . getBody ( ) ; il . append ( factory . createNew ( aspectType . getName ( ) ) ) ; il . append ( DUP ) ; il . append ( factory . createInvoke ( aspectType . getName ( ) , "<init>" , VOID , NO_ARGS , INVOKESPECIAL ) ) ; il . append ( Utility . createSet ( factory , AjcMemberMaker . perSingletonField ( aspectType ) ) ) ; il . append ( InstructionFactory . createReturn ( VOID ) ) ; LazyMethodGen clinit = classGen . getStaticInitializer ( ) ; il = new InstructionList ( ) ; InstructionHandle tryStart = il . append ( factory . createInvoke ( aspectType . getName ( ) , AJC_POST_CLINIT_NAME , VOID , NO_ARGS , INVOKESTATIC ) ) ; BranchInstruction tryEnd = InstructionFactory . createBranchInstruction ( GOTO , null ) ; il . append ( tryEnd ) ; InstructionHandle handler = il . append ( ASTORE_0 ) ; il . append ( ALOAD_0 ) ; il . append ( Utility . createSet ( factory , AjcMemberMaker . initFailureCauseField ( aspectType ) ) ) ; il . append ( InstructionFactory . createReturn ( VOID ) ) ; tryEnd . setTarget ( il . getEnd ( ) ) ; if ( ( clinit . getBody ( ) . getEnd ( ) . getInstruction ( ) . getOpcode ( ) ) == ( Constants . IMPDEP1 ) ) { clinit . getBody ( ) . getEnd ( ) . getPrev ( ) . setInstruction ( new NOP ( ) ) ; } clinit . getBody ( ) . getEnd ( ) . setInstruction ( new NOP ( ) ) ; clinit . getBody ( ) . append ( il ) ; <START_BUG> clinit . addExceptionHandler ( tryStart , handler , handler , new ObjectType ( "java.lang.Throwable" ) , false ) ; <END_BUG> } private void generatePerObjectAspectOfMethod ( LazyClassGen classGen ) { } private void generatePerObjectHasAspectMethod ( LazyClassGen classGen ) { } private void generatePerObjectBindMethod ( LazyClassGen classGen ) { } private void generatePerObjectGetSetMethods ( LazyClassGen classGen ) { } private void generatePerCflowAspectOfMethod ( LazyClassGen classGen ) { } private void generatePerCflowHasAspectMethod ( LazyClassGen classGen ) { } private void generatePerCflowPushMethod ( LazyClassGen classGen ) { } private void generatePerCflowAjcClinitMethod ( LazyClassGen classGen ) { } private void generatePerTWAspectOfMethod ( LazyClassGen classGen ) { } private void generatePerTWHasAspectMethod ( LazyClassGen classGen ) { } private void generatePerTWGetInstanceMethod ( LazyClassGen classGen ) { } private void generatePerTWCreateAspectInstanceMethod ( LazyClassGen classGen ) { } private static void flagAsSynthetic ( LazyMethodGen methodGen , boolean makeJavaSynthetic ) { } }

Fix:
clinit . addExceptionHandler ( tryStart , handler . getPrev ( ) , handler , new ObjectType ( "java.lang.Throwable" ) , false ) ;