contract C {
    uint256[] data;
    uint256[] m_c;

    function g() internal returns (uint256 a, uint256 b, uint256[] storage c) {
        return (1, 2, data);
    }

    function h() external returns (uint256 a, uint256 b) {
        return (5, 6);
    }

    function f() public returns (uint256) {
        data.push(3);
        uint256 a;
        uint256 b;
        (a, b) = this.h();
        if (a != 5 || b != 6) return 1;
        uint256[] storage c = m_c;
        (a, b, c) = g();
        if (a != 1 || b != 2 || c[0] != 3) return 2;
        (a, b) = (b, a);
        if (a != 2 || b != 1) return 3;
        (a, , b, , ) = (8, 9, 10, 11, 12);
        if (a != 8 || b != 10) return 4;
    }
}
// ====
// compileViaYul: also
// ----
// f() -> 0
