Program: 147294
Project: 147294
Buggy source:
@Override public Conditional<Instruction> execute(FeatureExpr ctx,final ThreadInfo ti){
  pushValue=One.valueOf(0);
  final StackFrame frame=ti.getModifiableTopFrame();
  final Instruction thisInstruction=this;
  Conditional<Integer> aref=frame.peek(ctx,1);
  final ArrayLoadInstruction instruction=this;
  pushCtx=ctx;
  Conditional<Instruction> next=aref.mapf(ctx,new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
    @Override public Conditional<Instruction> apply(    FeatureExpr ctx,    Integer aref){
      if (aref == MJIEnv.NULL) {
        pushCtx=pushCtx.andNot(ctx);
        return new One<>(ti.createAndThrowException(ctx,"String_Node_Str"));
      }
      final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref);
      if (isNewPorBoundary(e,ti)) {
        if (createAndSetArrayCG(e,ti,aref,peekIndex(ctx,ti),true)) {
          pushCtx=pushCtx.andNot(ctx);
          return new One<Instruction>(instruction);
        }
      }
      return new One<Instruction>(null);
    }
  }
);
  index=frame.pop(ctx);
  arrayRef=frame.pop(ctx);
  next=ChoiceFactory.create(pushCtx,arrayRef.mapf(ctx,new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
    @Override public Conditional<Instruction> apply(    FeatureExpr ctx,    Integer aref){
      final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref);
      return index.mapf(ctx,new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
        @Override public Conditional<Instruction> apply(        FeatureExpr ctx,        Integer index){
          try {
            final Conditional push=getPushValue(ctx,frame,e,index);
            pushValue=ChoiceFactory.create(ctx,push,pushValue);
            return getNext(ctx,ti);
          }
 catch (          ArrayIndexOutOfBoundsException ex) {
            pushCtx=pushCtx.andNot(ctx);
            return new One<Instruction>(new EXCEPTION(thisInstruction,java.lang.ArrayIndexOutOfBoundsException.class.getName(),Integer.toString(index)));
          }
        }
      }
);
    }
  }
),next);
  frame.push(pushCtx,pushValue,isReference());
  if (index.isOne() && aref.isOne()) {
    final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref.getValue());
    Object attr=e.getElementAttr(index.getValue());
    if (attr != null) {
      if (getElementSize() == 1) {
        frame.setOperandAttr(attr);
      }
 else {
        frame.setLongOperandAttr(attr);
      }
    }
  }
  return next;
}

Fixed version (ground truth):
@Override public Conditional<Instruction> execute(FeatureExpr ctx,final ThreadInfo ti){
  pushValue=One.valueOf(0);
  final StackFrame frame=ti.getModifiableTopFrame();
  final Instruction thisInstruction=this;
  Conditional<Integer> aref=frame.peek(ctx,1);
  final ArrayLoadInstruction instruction=this;
  pushCtx=ctx;
  Conditional<Instruction> next=aref.mapf(ctx,new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
    @Override public Conditional<Instruction> apply(    FeatureExpr ctx,    Integer aref){
      if (aref == MJIEnv.NULL) {
        pushCtx=pushCtx.andNot(ctx);
        return new One<>(new EXCEPTION("String_Node_Str","String_Node_Str"));
      }
      final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref);
      if (isNewPorBoundary(e,ti)) {
        if (createAndSetArrayCG(e,ti,aref,peekIndex(ctx,ti),true)) {
          pushCtx=pushCtx.andNot(ctx);
          return new One<Instruction>(instruction);
        }
      }
      return new One<Instruction>(null);
    }
  }
);
  if (Conditional.isContradiction(pushCtx)) {
    return next;
  }
  index=frame.pop(ctx);
  arrayRef=frame.pop(ctx).simplify(pushCtx);
  next=ChoiceFactory.create(pushCtx,arrayRef.mapf(FeatureExprFactory.True(),new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
    @Override public Conditional<Instruction> apply(    FeatureExpr ctx,    Integer aref){
      final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref);
      return index.mapf(ctx,new BiFunction<FeatureExpr,Integer,Conditional<Instruction>>(){
        @Override public Conditional<Instruction> apply(        FeatureExpr ctx,        Integer index){
          try {
            final Conditional push=getPushValue(ctx,frame,e,index);
            pushValue=ChoiceFactory.create(ctx,push,pushValue);
            return getNext(ctx,ti);
          }
 catch (          ArrayIndexOutOfBoundsException ex) {
            pushCtx=pushCtx.andNot(ctx);
            return new One<Instruction>(new EXCEPTION(thisInstruction,java.lang.ArrayIndexOutOfBoundsException.class.getName(),Integer.toString(index)));
          }
        }
      }
);
    }
  }
),next);
  frame.push(pushCtx,pushValue,isReference());
  if (index.isOne() && aref.isOne()) {
    final ElementInfo e=ti.getElementInfoWithUpdatedSharedness(aref.getValue());
    Object attr=e.getElementAttr(index.getValue());
    if (attr != null) {
      if (getElementSize() == 1) {
        frame.setOperandAttr(attr);
      }
 else {
        frame.setLongOperandAttr(attr);
      }
    }
  }
  return next;
}