[libcxx-commits] [libcxx] 44e24d8 - [libc++] Remove test suite workarounds on Apple with old Clangs

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Thu Apr 15 10:06:15 PDT 2021


Author: Louis Dionne
Date: 2021-04-15T13:06:06-04:00
New Revision: 44e24d8f998cf6e5bd5ca9c166562a841161a15a

URL: https://github.com/llvm/llvm-project/commit/44e24d8f998cf6e5bd5ca9c166562a841161a15a
DIFF: https://github.com/llvm/llvm-project/commit/44e24d8f998cf6e5bd5ca9c166562a841161a15a.diff

LOG: [libc++] Remove test suite workarounds on Apple with old Clangs

In 5fd17ab, we worked around the Apple system headers not providing
const-correct overloads for some <string.h> functions. However, that
required an attribute that was only present in recent Clangs at the
time. We can now assume that all supported Clang versions on Apple
platforms do support that attribute.

Differential Revision: https://reviews.llvm.org/D100477

Added: 
    

Modified: 
    libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp
    libcxx/test/std/depr/depr.c.headers/wchar_h.pass.cpp
    libcxx/test/std/strings/c.strings/cstring.pass.cpp
    libcxx/test/std/strings/c.strings/cwchar.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp
index c5eac1adbf968..4e18107d90db0 100644
--- a/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp
+++ b/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp
@@ -36,12 +36,17 @@ int main(int, char**)
     static_assert((std::is_same<decltype(strcoll(cpc, cpc)), int>::value), "");
     static_assert((std::is_same<decltype(strxfrm(cp, cpc, s)), size_t>::value), "");
     static_assert((std::is_same<decltype(memchr(vp, 0, s)), void*>::value), "");
+    static_assert((std::is_same<decltype(memchr(vpc, 0, s)), const void*>::value), "");
     static_assert((std::is_same<decltype(strchr(cp, 0)), char*>::value), "");
+    static_assert((std::is_same<decltype(strchr(cpc, 0)), const char*>::value), "");
     static_assert((std::is_same<decltype(strcspn(cpc, cpc)), size_t>::value), "");
     static_assert((std::is_same<decltype(strpbrk(cp, cpc)), char*>::value), "");
+    static_assert((std::is_same<decltype(strpbrk(cpc, cpc)), const char*>::value), "");
     static_assert((std::is_same<decltype(strrchr(cp, 0)), char*>::value), "");
+    static_assert((std::is_same<decltype(strrchr(cpc, 0)), const char*>::value), "");
     static_assert((std::is_same<decltype(strspn(cpc, cpc)), size_t>::value), "");
     static_assert((std::is_same<decltype(strstr(cp, cpc)), char*>::value), "");
+    static_assert((std::is_same<decltype(strstr(cpc, cpc)), const char*>::value), "");
 #ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
     static_assert((std::is_same<decltype(strtok(cp, cpc)), char*>::value), "");
 #endif
@@ -49,16 +54,5 @@ int main(int, char**)
     static_assert((std::is_same<decltype(strerror(0)), char*>::value), "");
     static_assert((std::is_same<decltype(strlen(cpc)), size_t>::value), "");
 
-    // These tests fail on systems whose C library doesn't provide a correct overload
-    // set for strchr, strpbrk, strrchr, strstr, and memchr, unless the compiler is
-    // a suitably recent version of Clang.
-#if !defined(__APPLE__) || defined(_LIBCPP_PREFERRED_OVERLOAD)
-    static_assert((std::is_same<decltype(strchr(cpc, 0)), const char*>::value), "");
-    static_assert((std::is_same<decltype(strpbrk(cpc, cpc)), const char*>::value), "");
-    static_assert((std::is_same<decltype(strrchr(cpc, 0)), const char*>::value), "");
-    static_assert((std::is_same<decltype(strstr(cpc, cpc)), const char*>::value), "");
-    static_assert((std::is_same<decltype(memchr(vpc, 0, s)), const void*>::value), "");
-#endif
-
-  return 0;
+    return 0;
 }

diff  --git a/libcxx/test/std/depr/depr.c.headers/wchar_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/wchar_h.pass.cpp
index eb212ff5bfd34..b297ab06d848e 100644
--- a/libcxx/test/std/depr/depr.c.headers/wchar_h.pass.cpp
+++ b/libcxx/test/std/depr/depr.c.headers/wchar_h.pass.cpp
@@ -85,14 +85,19 @@ int main(int, char**)
     static_assert((std::is_same<decltype(wcsncmp(L"", L"", s)), int>::value), "");
     static_assert((std::is_same<decltype(wcsxfrm(ws, L"", s)), size_t>::value), "");
     static_assert((std::is_same<decltype(wcschr((wchar_t*)0, L' ')), wchar_t*>::value), "");
+    static_assert((std::is_same<decltype(wcschr((const wchar_t*)0, L' ')), const wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wcscspn(L"", L"")), size_t>::value), "");
     static_assert((std::is_same<decltype(wcslen(L"")), size_t>::value), "");
     static_assert((std::is_same<decltype(wcspbrk((wchar_t*)0, L"")), wchar_t*>::value), "");
+    static_assert((std::is_same<decltype(wcspbrk((const wchar_t*)0, L"")), const wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wcsrchr((wchar_t*)0, L' ')), wchar_t*>::value), "");
+    static_assert((std::is_same<decltype(wcsrchr((const wchar_t*)0, L' ')), const wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wcsspn(L"", L"")), size_t>::value), "");
     static_assert((std::is_same<decltype(wcsstr((wchar_t*)0, L"")), wchar_t*>::value), "");
+    static_assert((std::is_same<decltype(wcsstr((const wchar_t*)0, L"")), const wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wcstok(ws, L"", (wchar_t**)0)), wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wmemchr((wchar_t*)0, L' ', s)), wchar_t*>::value), "");
+    static_assert((std::is_same<decltype(wmemchr((const wchar_t*)0, L' ', s)), const wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wmemcmp(L"", L"", s)), int>::value), "");
     static_assert((std::is_same<decltype(wmemcpy(ws, L"", s)), wchar_t*>::value), "");
     static_assert((std::is_same<decltype(wmemmove(ws, L"", s)), wchar_t*>::value), "");
@@ -107,17 +112,6 @@ int main(int, char**)
     static_assert((std::is_same<decltype(mbsrtowcs(ws, (const char**)0, s, &mb)), size_t>::value), "");
     static_assert((std::is_same<decltype(wcsrtombs(ns, (const wchar_t**)0, s, &mb)), size_t>::value), "");
 
-    // These tests fail on systems whose C library doesn't provide a correct overload
-    // set for wcschr, wcspbrk, wcsrchr, wcsstr, and wmemchr, unless the compiler is
-    // a suitably recent version of Clang.
-#if !defined(__APPLE__) || defined(_LIBCPP_PREFERRED_OVERLOAD)
-    static_assert((std::is_same<decltype(wcschr((const wchar_t*)0, L' ')), const wchar_t*>::value), "");
-    static_assert((std::is_same<decltype(wcspbrk((const wchar_t*)0, L"")), const wchar_t*>::value), "");
-    static_assert((std::is_same<decltype(wcsrchr((const wchar_t*)0, L' ')), const wchar_t*>::value), "");
-    static_assert((std::is_same<decltype(wcsstr((const wchar_t*)0, L"")), const wchar_t*>::value), "");
-    static_assert((std::is_same<decltype(wmemchr((const wchar_t*)0, L' ', s)), const wchar_t*>::value), "");
-#endif
-
 #ifndef _LIBCPP_HAS_NO_STDIN
     static_assert((std::is_same<decltype(getwchar()), wint_t>::value), "");
     static_assert((std::is_same<decltype(vwscanf(L"", va)), int>::value), "");
@@ -130,5 +124,5 @@ int main(int, char**)
     static_assert((std::is_same<decltype(wprintf(L"")), int>::value), "");
 #endif
 
-  return 0;
+    return 0;
 }

diff  --git a/libcxx/test/std/strings/c.strings/cstring.pass.cpp b/libcxx/test/std/strings/c.strings/cstring.pass.cpp
index c8ee2789df47a..3d667ed03a69f 100644
--- a/libcxx/test/std/strings/c.strings/cstring.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cstring.pass.cpp
@@ -37,12 +37,17 @@ int main(int, char**)
     ASSERT_SAME_TYPE(int,         decltype(std::strcoll(cpc, cpc)));
     ASSERT_SAME_TYPE(std::size_t, decltype(std::strxfrm(cp, cpc, s)));
     ASSERT_SAME_TYPE(void*,       decltype(std::memchr(vp, 0, s)));
+    ASSERT_SAME_TYPE(const void*, decltype(std::memchr(vpc, 0, s)));
     ASSERT_SAME_TYPE(char*,       decltype(std::strchr(cp, 0)));
+    ASSERT_SAME_TYPE(const char*, decltype(std::strchr(cpc, 0)));
     ASSERT_SAME_TYPE(std::size_t, decltype(std::strcspn(cpc, cpc)));
     ASSERT_SAME_TYPE(char*,       decltype(std::strpbrk(cp, cpc)));
+    ASSERT_SAME_TYPE(const char*, decltype(std::strpbrk(cpc, cpc)));
     ASSERT_SAME_TYPE(char*,       decltype(std::strrchr(cp, 0)));
+    ASSERT_SAME_TYPE(const char*, decltype(std::strrchr(cpc, 0)));
     ASSERT_SAME_TYPE(std::size_t, decltype(std::strspn(cpc, cpc)));
     ASSERT_SAME_TYPE(char*,       decltype(std::strstr(cp, cpc)));
+    ASSERT_SAME_TYPE(const char*, decltype(std::strstr(cpc, cpc)));
 #ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
     ASSERT_SAME_TYPE(char*,       decltype(std::strtok(cp, cpc)));
 #endif
@@ -50,16 +55,5 @@ int main(int, char**)
     ASSERT_SAME_TYPE(char*,       decltype(std::strerror(0)));
     ASSERT_SAME_TYPE(std::size_t, decltype(std::strlen(cpc)));
 
-    // These tests fail on systems whose C library doesn't provide a correct overload
-    // set for strchr, strpbrk, strrchr, strstr, and memchr, unless the compiler is
-    // a suitably recent version of Clang.
-#if !defined(__APPLE__) || defined(_LIBCPP_PREFERRED_OVERLOAD)
-    ASSERT_SAME_TYPE(const void*, decltype(std::memchr(vpc, 0, s)));
-    ASSERT_SAME_TYPE(const char*, decltype(std::strchr(cpc, 0)));
-    ASSERT_SAME_TYPE(const char*, decltype(std::strpbrk(cpc, cpc)));
-    ASSERT_SAME_TYPE(const char*, decltype(std::strrchr(cpc, 0)));
-    ASSERT_SAME_TYPE(const char*, decltype(std::strstr(cpc, cpc)));
-#endif
-
-  return 0;
+    return 0;
 }

diff  --git a/libcxx/test/std/strings/c.strings/cwchar.pass.cpp b/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
index 44ccf3f7264e0..7d670d0059b60 100644
--- a/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
@@ -85,14 +85,19 @@ int main(int, char**)
     ASSERT_SAME_TYPE(int,                decltype(std::wcsncmp(L"", L"", s)));
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsxfrm(ws, L"", s)));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcschr((wchar_t*)0, L' ')));
+    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcschr((const wchar_t*)0, L' ')));
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcscspn(L"", L"")));
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcslen(L"")));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcspbrk((wchar_t*)0, L"")));
+    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcspbrk((const wchar_t*)0, L"")));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsrchr((wchar_t*)0, L' ')));
+    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsrchr((const wchar_t*)0, L' ')));
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsspn(L"", L"")));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsstr((wchar_t*)0, L"")));
+    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsstr((const wchar_t*)0, L"")));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcstok(ws, L"", (wchar_t**)0)));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemchr((wchar_t*)0, L' ', s)));
+    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wmemchr((const wchar_t*)0, L' ', s)));
     ASSERT_SAME_TYPE(int,                decltype(std::wmemcmp(L"", L"", s)));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemcpy(ws, L"", s)));
     ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemmove(ws, L"", s)));
@@ -107,17 +112,6 @@ int main(int, char**)
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::mbsrtowcs(ws, (const char**)0, s, &mb)));
     ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsrtombs(ns, (const wchar_t**)0, s, &mb)));
 
-    // These tests fail on systems whose C library doesn't provide a correct overload
-    // set for wcschr, wcspbrk, wcsrchr, wcsstr, and wmemchr, unless the compiler is
-    // a suitably recent version of Clang.
-#if !defined(__APPLE__) || defined(_LIBCPP_PREFERRED_OVERLOAD)
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcschr((const wchar_t*)0, L' ')));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcspbrk((const wchar_t*)0, L"")));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsrchr((const wchar_t*)0, L' ')));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsstr((const wchar_t*)0, L"")));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wmemchr((const wchar_t*)0, L' ', s)));
-#endif
-
 #ifndef _LIBCPP_HAS_NO_STDIN
     ASSERT_SAME_TYPE(std::wint_t,        decltype(std::getwchar()));
     ASSERT_SAME_TYPE(int,                decltype(std::vwscanf(L"", va)));
@@ -130,5 +124,5 @@ int main(int, char**)
     ASSERT_SAME_TYPE(int,                decltype(std::wprintf(L"")));
 #endif
 
-  return 0;
+    return 0;
 }


        


More information about the libcxx-commits mailing list