aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-06-12 22:22:39 +0000
committerPedro Alves <palves@gcc.gnu.org>2017-06-12 22:22:39 +0000
commitb51483f48f3cc67cf4b508bdd9c4b6a47b44c53a (patch)
tree8fe8182274a7fa45124f605da11d566d091e8373 /gcc
parent07cfc2d75d85c5fc961bdd8434673f0a5f40587d (diff)
downloadgcc-b51483f48f3cc67cf4b508bdd9c4b6a47b44c53a.zip
gcc-b51483f48f3cc67cf4b508bdd9c4b6a47b44c53a.tar.gz
gcc-b51483f48f3cc67cf4b508bdd9c4b6a47b44c53a.tar.bz2
Finish implementing P0426R1 "Constexpr for std::char_traits" for C++17
As discussed in PR c++/80265 ("__builtin_{memcmp,memchr,strlen} are not usable in constexpr functions"), use __builtin_constant_p to tell whether we can defer to a constexpr algorithm. I used __always_inline__ just to be thorough. It isn't really really necessary as far as I could determine. Changes like these: if (__n == 0) return 0; - return wmemcmp(__s1, __s2, __n); + else + return wmemcmp(__s1, __s2, __n); are necessary otherwise G++ complains that we're calling a non-constexpr function, which looks like a a manifestation of PR67026 to me. libstdc++-v3: 2017-06-12 Pedro Alves <palves@redhat.com> * doc/xml/manual/status_cxx2017.xml: Update C++17 constexpr char_traits status. * doc/html/*: Regenerate. * include/bits/char_traits.h (_GLIBCXX_ALWAYS_INLINE): Define if not already defined. (__cpp_lib_constexpr_char_traits): Uncomment. (__constant_string_p, __constant_char_array_p): New. (std::char_traits<char>, std::char_traits<wchar_t>): Add _GLIBCXX17_CONSTEXPR on compare, length and find and use __constant_string_p, __constant_char_array_p and __builtin_constant_p to defer to __gnu_cxx::char_traits at compile time. * testsuite/21_strings/char_traits/requirements/ constexpr_functions_c++17.cc: Uncomment __cpp_lib_constexpr_char_traits tests. Uncomment test_compare<char>, test_length<char>, test_find<char>, test_compare<wchar_t>, test_length<wchar_t> and test_find<wchar_t> static_assert tests. From-SVN: r249137
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions