<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61100>61100</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            string_view(ptr, len) should assert len <= PTRDIFF_MAX
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          davidben
      </td>
    </tr>
</table>

<pre>
    Comparing libc++'s `std::string_view` to Abseil's `absl::string_view` and Chromium's `base::StringPiece`, we broadly have parity with `_LIBCPP_ASSERT` except for one place:

`absl::string_view(ptr, len)` checks `len <= std::numeric_limits<difference_type>::max()`:
https://github.com/abseil/abseil-cpp/blob/1d07cfede2d0153ebfa23543ffcc08faf55b4539/absl/strings/string_view.h#L202
https://github.com/abseil/abseil-cpp/blob/1d07cfede2d0153ebfa23543ffcc08faf55b4539/absl/strings/string_view.h#L603

Chromium `base::StringPiece(ptr, len)` takes a `base::CheckedNumeric<size_t>` and asserts the value fits:
https://chromium-review.googlesource.com/c/chromium/src/+/4021423

Bringing `base::CheckedNumeric<size_t>` in is clearly a bit much, but I think the Abseil check is functionally equivalent to the Chromium one: negative values will convert to some value between `PTRDIFF_MAX` and `SIZE_MAX`, and no allocation can be larger than `PTRDIFF_MAX` or pointer arithmetic doesn't work. Could we add an equivalent check to `std::string_view`?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVE2P4jgQ_TXmUmrkOCSQQw5Ad6SWZlet6Tms9oL8USHeduys7cCwv37lBHoZqaelvY2EIDivyq9eVT0egj5axJoUO1I8LvgYO-drxU9aCbQL4dSl3rt-4F7bIxgtJGG76bMOQEoaoiL5luTbEBPicNJ4JiWF6GArAmpzA3IRzIdIbhXsO-96PfY3sOABZ_DrBH7RKJGUlLA9nBGEd1yZC3T8hJCoxQucdexS6OHL827_8nLYvr4-ff2WLsDvEocIrfPgLMJguJyS00dCb98_48c2Q_TpVoOWsCqlkx3Kt4mlQQsk35P8Ed5lsGOPXsuD0b2OgeR7pdsWPVqJh3gZkORPM7Dn3wnbzDnf2XQxDiH9Yw1hzVHHbhRL6XrCGn5V8_rwIIeBsEYYJwhrMkXXskWFTNGsyFG0nOXFKm9bKemm5W1RiFWRV3N4yjIXGd6fpnKXHWH5F0bZL8SmpPl9p26T8vMp-aBlkb9hAP5jzD71EdXvc8NIvg_6HzzE1KDrVPIQ0McAsUM4cTMitFNPP2yWvBJ78DiRPzp3NBjc6CVeRZN3sFSql1PojrBmRVm2Yj9UukslpaX7H6y1BR1AGuTeXICD0BH6UXZJDjFGeIbYafs2VTSv5zzOKaodrYzaWW7MBfDvUZ-4QRvTJif4u_DOJipg8cijPl2VCXDWxoB09oR-igmuv6kmMJ4x7UpJX759fXxumsNv2z9uKpOSvj7_-XQ9SkzTqXXAjXGSJ0oguQWBYLg_oofY8Y-SOQ-D0zaih2QJXY9RS1AOgyVsHeHs_NsS9m40KpkIVwq4va90liK6T3yN5M1C1bmq8oovsM7K9bqs1kXGFl1dpJnelJsi42ydrTYV3QguabZWbFNR1i50zSjLaU6zrKJFxpabSlQoWhR0JTjimqwo9lybpTGnfun8caFDGLEus4zSheECTZicmjGLZ5heEsaScfs6xTyI8RjIihodYvgvS9TRYP2Jr0HoJlnmiYc7Y7vTeDF6U3_iCem668_D4N1fKCNhzUQybfZUxL8BAAD__-SMDIw">