Buggy code:
public final class BackPropagation extends BackwardFlowAnalysis < BackPropagation . Env > { private static final HashMap < Integer , Block > afterInserts = new HashMap < Integer , Block > ( ) ; private static final HashMap < Integer , Block . Entry > rewrites = new HashMap < Integer , Block . Entry > ( ) ; public BackPropagation ( ModuleLoader loader ) { } @ Override protected TypeDef propagate ( Module . TypeDef type ) { } @ Override protected BackPropagation . Env lastStore ( ) { } @ Override protected Case propagate ( Module . Case mcase ) { } @ Override protected BackPropagation . Env propagate ( int index , Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Assert code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . BinOp code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Convert code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Const code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Debug code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Destructure code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . FieldLoad code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . IndirectInvoke code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . IndirectSend code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Invoke code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Invert code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . ListAppend code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . LengthOf code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . SubList code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . IndexOf code , Block . Entry entry , BackPropagation . Env environment ) { Type req = environment . pop ( ) ; <START_BUG> coerceAfter ( req , code . type . element ( ) , index , entry ) ; <END_BUG> environment . push ( ( ( Type ) ( code . type ) ) ) ; environment . push ( code . type . key ( ) ) ; } private void infer ( int index , Code . Load code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Update code , Block . Entry stmt , BackPropagation . Env environment ) { } private void infer ( int index , Code . NewDict code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . NewRecord code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . NewList code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . NewSet code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . NewTuple code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Return code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Send code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Store code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . SetUnion code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . SetIntersect code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . SetDifference code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . StringAppend code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . SubString code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Negate code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . New code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . Throw code , Block . Entry entry , BackPropagation . Env environment ) { } private void infer ( int index , Code . TupleLoad code , Block . Entry entry , BackPropagation . Env environment ) { }

Fix:
coerceAfter ( req , code . type . value ( ) , index , entry ) ;