xgupta added a comment.

In D155457#4511652 <https://reviews.llvm.org/D155457#4511652>, @aaron.ballman 
wrote:

> In the x86 compilation: `sizeof(std::size_t) < sizeof(uint64_t)` is true, so 
> we test the other expression; because `Size` is greater than `__SIZE_MAX__` 
> the function returns false and the second static assertion fails as expected.
> In the x64 compilation: `sizeof(std::size_t) < sizeof(uint64_t)` is false 
> (first static assertion fails) so we shouldn't even be evaluating the RHS of 
> the `&&` to see if it's tautological because it can't contribute to the 
> expression result, right?

Yes, I agree with both statements but what is odd in current behavior?

It seems to me uint64_t is unsigned long in <cstdint>, not unsigned long long 
so the new test added in this patch (with `typedef unsigned long uint64_t`) is 
now passing.

Behavior when the patch is applied-

  $ ./bin/clang++ -Wall -fsyntax-only test.cpp -m64  -Wtype-limits 
  test.cpp:8:11: warning: result of comparison 'uint64_t' (aka 'unsigned long 
long') > 18446744073709551615 is always false 
[-Wtautological-type-limit-compare]
      8 |      Size > static_cast<uint64_t>(__SIZE_MAX__)) // no-warning
        |      ~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  test.cpp:13:15: error: static assertion failed due to requirement 
'sizeof(unsigned long) < sizeof(unsigned long long)': 
     13 | static_assert(sizeof(std::size_t) < sizeof(uint64_t), "");
        |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  test.cpp:13:35: note: expression evaluates to '8 < 8'
     13 | static_assert(sizeof(std::size_t) < sizeof(uint64_t), "");
        |               ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
  1 warning and 1 error generated.

  $ ./bin/clang++ -Wall -fsyntax-only test1.cpp -m64  -Wtype-limits 
  test1.cpp:12:15: error: static assertion failed due to requirement 
'sizeof(unsigned long) < sizeof(unsigned long)': 
     12 | static_assert(sizeof(std::size_t) < sizeof(uint64_t), "");
        |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  test1.cpp:12:35: note: expression evaluates to '8 < 8'
     12 | static_assert(sizeof(std::size_t) < sizeof(uint64_t), "");
        |               ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
  1 error generated.

where test.cpp using wrapper and test1.cpp is using standard headers.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155457/new/

https://reviews.llvm.org/D155457

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to