@Override public void visitArrayIndexExpr(ArrayIndexExpr arrayIndexExpr) { Type type = typer.lookupType(arrayIndexExpr.getArray()); if (type == null) { return; } type = type.getWithoutQualifiers(); assert isArrayVectorOrMatrix(type); if (!staticallyInBounds(arrayIndexExpr.getIndex(), type)) { arrayIndexExpr.setIndex(new TernaryExpr( new BinaryExpr( new BinaryExpr( new ParenExpr(arrayIndexExpr.getIndex().clone()), new IntConstantExpr("0"), BinOp.GE), new BinaryExpr( new ParenExpr(arrayIndexExpr.getIndex().clone()), new IntConstantExpr(getSize(type).toString()), BinOp.LT), BinOp.LAND), arrayIndexExpr.getIndex(), new IntConstantExpr("0")) ); } super.visitArrayIndexExpr(arrayIndexExpr); }