// This has to work without linking, because everything will be inlined.
library L {
    struct S {
        uint256[] data;
    }

    function f(S memory _s) internal returns (uint256[] memory) {
        _s.data[3] = 2;
        return _s.data;
    }
}


contract C {
    using L for L.S;

    function f() public returns (uint256) {
        L.S memory x;
        x.data = new uint256[](7);
        x.data[3] = 8;
        return x.f()[3];
    }
}

// ====
// compileViaYul: also
// ----
// f() -> 2
