revive-integration 1.2.0

revive compiler integration test cases
// SPDX-License-Identifier: MIT

pragma solidity ^0.8;

/// Half-constant variants of the operations in `DivisionArithmetics.sol`:
/// one operand reaches the compiler as a literal, the other comes from
/// calldata. solc cannot fold an op when one side is a parameter, so the
/// final bytecode contains a real div/sdiv/mod/smod with one constant
/// operand — exercising revive's "one literal operand" codegen path.
///
/// Split into four contracts (one per opcode) so each compiled blob stays
/// well under polkavm-linker's debug line-program limit. A single 58-function
/// contract overflowed it in debug builds.
///
/// Two-constant cases are covered by Yul fixtures (see
/// `*BothConst.yul`) to bypass solc's Yul optimizer.

contract DivConst {
    function divRhsZero(uint256 n) public pure returns (uint256 r) { assembly { r := div(n, 0) } }
    function divRhsOne(uint256 n) public pure returns (uint256 r) { assembly { r := div(n, 1) } }
    function divRhsTwo(uint256 n) public pure returns (uint256 r) { assembly { r := div(n, 2) } }
    function divRhsFive(uint256 n) public pure returns (uint256 r) { assembly { r := div(n, 5) } }
    function divRhsMax(uint256 n) public pure returns (uint256 r) {
        uint256 c = type(uint256).max;
        assembly { r := div(n, c) }
    }

    function divLhsZero(uint256 d) public pure returns (uint256 r) { assembly { r := div(0, d) } }
    function divLhsOne(uint256 d) public pure returns (uint256 r) { assembly { r := div(1, d) } }
    function divLhsTwo(uint256 d) public pure returns (uint256 r) { assembly { r := div(2, d) } }
    function divLhsFive(uint256 d) public pure returns (uint256 r) { assembly { r := div(5, d) } }
    function divLhsMax(uint256 d) public pure returns (uint256 r) {
        uint256 c = type(uint256).max;
        assembly { r := div(c, d) }
    }
}

contract SdivConst {
    function sdivRhsZero(int256 n) public pure returns (int256 r) { assembly { r := sdiv(n, 0) } }
    function sdivRhsOne(int256 n) public pure returns (int256 r) { assembly { r := sdiv(n, 1) } }
    function sdivRhsNegOne(int256 n) public pure returns (int256 r) {
        int256 c = -1;
        assembly { r := sdiv(n, c) }
    }
    function sdivRhsTwo(int256 n) public pure returns (int256 r) { assembly { r := sdiv(n, 2) } }
    function sdivRhsNegTwo(int256 n) public pure returns (int256 r) {
        int256 c = -2;
        assembly { r := sdiv(n, c) }
    }
    function sdivRhsFive(int256 n) public pure returns (int256 r) { assembly { r := sdiv(n, 5) } }
    function sdivRhsNegFive(int256 n) public pure returns (int256 r) {
        int256 c = -5;
        assembly { r := sdiv(n, c) }
    }
    function sdivRhsMin(int256 n) public pure returns (int256 r) {
        int256 c = type(int256).min;
        assembly { r := sdiv(n, c) }
    }
    function sdivRhsMinPlusOne(int256 n) public pure returns (int256 r) {
        int256 c = type(int256).min + 1;
        assembly { r := sdiv(n, c) }
    }
    function sdivRhsMax(int256 n) public pure returns (int256 r) {
        int256 c = type(int256).max;
        assembly { r := sdiv(n, c) }
    }

    function sdivLhsZero(int256 d) public pure returns (int256 r) { assembly { r := sdiv(0, d) } }
    function sdivLhsOne(int256 d) public pure returns (int256 r) { assembly { r := sdiv(1, d) } }
    function sdivLhsNegOne(int256 d) public pure returns (int256 r) {
        int256 c = -1;
        assembly { r := sdiv(c, d) }
    }
    function sdivLhsTwo(int256 d) public pure returns (int256 r) { assembly { r := sdiv(2, d) } }
    function sdivLhsNegTwo(int256 d) public pure returns (int256 r) {
        int256 c = -2;
        assembly { r := sdiv(c, d) }
    }
    function sdivLhsFive(int256 d) public pure returns (int256 r) { assembly { r := sdiv(5, d) } }
    function sdivLhsNegFive(int256 d) public pure returns (int256 r) {
        int256 c = -5;
        assembly { r := sdiv(c, d) }
    }
    function sdivLhsMin(int256 d) public pure returns (int256 r) {
        int256 c = type(int256).min;
        assembly { r := sdiv(c, d) }
    }
    function sdivLhsMinPlusOne(int256 d) public pure returns (int256 r) {
        int256 c = type(int256).min + 1;
        assembly { r := sdiv(c, d) }
    }
    function sdivLhsMax(int256 d) public pure returns (int256 r) {
        int256 c = type(int256).max;
        assembly { r := sdiv(c, d) }
    }
}

contract ModConst {
    function modRhsZero(uint256 n) public pure returns (uint256 r) { assembly { r := mod(n, 0) } }
    function modRhsOne(uint256 n) public pure returns (uint256 r) { assembly { r := mod(n, 1) } }
    function modRhsTwo(uint256 n) public pure returns (uint256 r) { assembly { r := mod(n, 2) } }
    function modRhsFive(uint256 n) public pure returns (uint256 r) { assembly { r := mod(n, 5) } }
    function modRhsMax(uint256 n) public pure returns (uint256 r) {
        uint256 c = type(uint256).max;
        assembly { r := mod(n, c) }
    }

    function modLhsZero(uint256 d) public pure returns (uint256 r) { assembly { r := mod(0, d) } }
    function modLhsOne(uint256 d) public pure returns (uint256 r) { assembly { r := mod(1, d) } }
    function modLhsTwo(uint256 d) public pure returns (uint256 r) { assembly { r := mod(2, d) } }
    function modLhsFive(uint256 d) public pure returns (uint256 r) { assembly { r := mod(5, d) } }
    function modLhsMax(uint256 d) public pure returns (uint256 r) {
        uint256 c = type(uint256).max;
        assembly { r := mod(c, d) }
    }
}

contract SmodConst {
    function smodRhsZero(int256 n) public pure returns (int256 r) { assembly { r := smod(n, 0) } }
    function smodRhsOne(int256 n) public pure returns (int256 r) { assembly { r := smod(n, 1) } }
    function smodRhsNegOne(int256 n) public pure returns (int256 r) {
        int256 c = -1;
        assembly { r := smod(n, c) }
    }
    function smodRhsTwo(int256 n) public pure returns (int256 r) { assembly { r := smod(n, 2) } }
    function smodRhsNegTwo(int256 n) public pure returns (int256 r) {
        int256 c = -2;
        assembly { r := smod(n, c) }
    }
    function smodRhsFive(int256 n) public pure returns (int256 r) { assembly { r := smod(n, 5) } }
    function smodRhsNegFive(int256 n) public pure returns (int256 r) {
        int256 c = -5;
        assembly { r := smod(n, c) }
    }
    function smodRhsMin(int256 n) public pure returns (int256 r) {
        int256 c = type(int256).min;
        assembly { r := smod(n, c) }
    }
    function smodRhsMax(int256 n) public pure returns (int256 r) {
        int256 c = type(int256).max;
        assembly { r := smod(n, c) }
    }

    function smodLhsZero(int256 d) public pure returns (int256 r) { assembly { r := smod(0, d) } }
    function smodLhsOne(int256 d) public pure returns (int256 r) { assembly { r := smod(1, d) } }
    function smodLhsNegOne(int256 d) public pure returns (int256 r) {
        int256 c = -1;
        assembly { r := smod(c, d) }
    }
    function smodLhsTwo(int256 d) public pure returns (int256 r) { assembly { r := smod(2, d) } }
    function smodLhsNegTwo(int256 d) public pure returns (int256 r) {
        int256 c = -2;
        assembly { r := smod(c, d) }
    }
    function smodLhsFive(int256 d) public pure returns (int256 r) { assembly { r := smod(5, d) } }
    function smodLhsNegFive(int256 d) public pure returns (int256 r) {
        int256 c = -5;
        assembly { r := smod(c, d) }
    }
    function smodLhsMin(int256 d) public pure returns (int256 r) {
        int256 c = type(int256).min;
        assembly { r := smod(c, d) }
    }
    function smodLhsMax(int256 d) public pure returns (int256 r) {
        int256 c = type(int256).max;
        assembly { r := smod(c, d) }
    }
}