revive-integration 1.4.0

revive compiler integration test cases
/// Probe: if newyork narrows the signextend BYTE-INDEX parameter to i64, a huge
/// index (>=31, which EVM treats as "leave value unchanged") truncated to a
/// small index would sign-extend from a low byte instead, changing the value.
/// `pp` is used as mload offset (case 0) to drive narrowing, and as the
/// signextend index (case 1). value 0x80 has bit 7 set, so signextend(0, 0x80)
/// = 0xff..ff80 while signextend(huge, 0x80) = 0x80.
object "SignextendIndexNarrow" {
    code { let s := datasize("SignextendIndexNarrow_deployed") codecopy(0, dataoffset("SignextendIndexNarrow_deployed"), s) return(0, s) }
    object "SignextendIndexNarrow_deployed" {
        code {
            let op := calldataload(0)
            let p := calldataload(32)
            let r0 := probe(op, p)
            let r1 := probe(op, p)
            let r2 := probe(op, p)
            let r3 := probe(op, p)
            mstore(0x200, r0) mstore(0x220, add(r1, add(r2, r3)))
            return(0x200, 64)
            function probe(opx, pp) -> r {
                switch opx
                case 0 { r := mload(pp) }
                case 1 { r := signextend(pp, 0x80) }
                case 2 { r := keccak256(pp, 32) }
                default { r := pp }
            }
        }
    }
}