Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
libcxx/include/__string | ||
---|---|---|
260 | I think it'd be better to have if (__libcpp_is_constant_evaluated()) { ... } else { ... } than just the early return. I normally don't care about this stuff, however in the case of is_constant_evaluated, I feel like having a clear if-else makes it clearer that we're doing the same thing in both branches, one in the compile-time world and one in the runtime world. Also, it might be a good idea to define a __memmove_constexpr function that we can call as-is from the else branch? |
This is looking good. I especially like how the tests require only minimal change between the runtime and the compile-time version. I think this is what we should strive for pretty much every time we constexpr-ify something going forward.
libcxx/include/__string | ||
---|---|---|
201 | This would be clearer (or something along those lines): // constexpr version of the C functions of the same name | |
204 | __memmove_constexpr? | |
217 | __memcpy_constexpr? | |
225 | __memset_constexpr? | |
658 | Is that necessary? | |
libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp | ||
20 | Did you forget to include the change to test_macros.h (or whatever file) where you add TEST_CONSTEXPR_CXX20? I can't find it. Also, I would suggest TEST_CONSTEXPR_AFTER_CXX17, to mirror the checks we usually make (which are always of the form #if STD > 17. |
libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp | ||
---|---|---|
20 |
Nevermind this, I just saw the other review. My bad.
Forget this, I'll comment on D68837 instead. |
Elaborated on the constexpr comment.
libcxx/include/__string | ||
---|---|---|
204 | I decided against this name here because this is more refactoring of the move algorithm for constexpr. Same line of reasoning for the below requests. | |
658 | Yes, this is necessary due to this test: assert(std::char_traits<char16_t>::move(NULL, s1, 0) == NULL); where, if n == 0, we should not perform the __s1 < __s2 check since that is UB. |
This would be clearer (or something along those lines):