I would move this logic into the init function.<br><br>But there's another problem.  mmap doesn't even accept a size_t, it accepts an off_t.  Also, as far as I'm aware, off_t is a signed type.  So perhaps you can compare against std::numeric_limits<off_t>::max() which will never be a tautological comparison <br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 21, 2017 at 6:41 AM Roman Lebedev via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">lebedev.ri created this revision.<br>
<br>
Found when testing stage-2 build with <a href="https://reviews.llvm.org/D38101" rel="noreferrer" target="_blank">https://reviews.llvm.org/D38101</a>.<br>
<br>
  In file included from /build/llvm/lib/Support/Path.cpp:1045:<br>
  /build/llvm/lib/Support/Unix/Path.inc:648:14: error: comparison 'uint64_t' (aka 'unsigned long') > 18446744073709551615 is always false [-Werror,-Wtautological-constant-compare]<br>
    if (length > std::numeric_limits<size_t>::max()) {<br>
        ~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
<br>
`size_t` is `uint64_t` here, apparently, thus any `uint64_t` value<br>
always fits into `size_t`.<br>
<br>
I suppose there may be cases where `size_t` is smaller (32-bit?),<br>
so i wrapped the `if()` into preprocessor `#if`. Not sure what<br>
better solution there could be.<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D38132" rel="noreferrer" target="_blank">https://reviews.llvm.org/D38132</a><br>
<br>
Files:<br>
  lib/Support/Unix/Path.inc<br>
<br>
<br>
Index: lib/Support/Unix/Path.inc<br>
===================================================================<br>
--- lib/Support/Unix/Path.inc<br>
+++ lib/Support/Unix/Path.inc<br>
@@ -644,11 +644,16 @@<br>
 mapped_file_region::mapped_file_region(int fd, mapmode mode, uint64_t length,<br>
                                        uint64_t offset, std::error_code &ec)<br>
     : Size(length), Mapping() {<br>
+  static_assert(std::numeric_limits<size_t>::max() == SIZE_MAX, "");<br>
+  static_assert(std::numeric_limits<uint64_t>::max() == UINT64_MAX, "");<br>
+<br>
+#if UINT64_MAX > SIZE_MAX<br>
   // Make sure that the requested size fits within SIZE_T.<br>
   if (length > std::numeric_limits<size_t>::max()) {<br>
     ec = make_error_code(errc::invalid_argument);<br>
     return;<br>
   }<br>
+#endif<br>
<br>
   ec = init(fd, offset, mode);<br>
   if (ec)<br>
<br>
<br>
</blockquote></div>