[libc-commits] [libc] b454e7a - [libc] Remove GPU string functions incompatible with C++
Joseph Huber via libc-commits
libc-commits at lists.llvm.org
Mon Jul 10 08:40:21 PDT 2023
Author: Joseph Huber
Date: 2023-07-10T10:40:10-05:00
New Revision: b454e7aa7ceb35a0070406ebd7ffdf1ed85f5ef8
URL: https://github.com/llvm/llvm-project/commit/b454e7aa7ceb35a0070406ebd7ffdf1ed85f5ef8
DIFF: https://github.com/llvm/llvm-project/commit/b454e7aa7ceb35a0070406ebd7ffdf1ed85f5ef8.diff
LOG: [libc] Remove GPU string functions incompatible with C++
These functions have definitions differing between C and C++. GNU
respects the C++ definitions while the LLVM libc does not. This causes
many bugs and the current hack creates other issues. Rather than hack
around this I'd rather temporarily disable these than regress with the
integration into other offloading languages. We lose test support for
them but we should be able to re-enable these once the `libc` headers
provide these correctly.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D154850
Added:
Modified:
clang/lib/Headers/llvm_libc_wrappers/string.h
libc/config/gpu/entrypoints.txt
libc/docs/gpu/support.rst
Removed:
################################################################################
diff --git a/clang/lib/Headers/llvm_libc_wrappers/string.h b/clang/lib/Headers/llvm_libc_wrappers/string.h
index 0cab5615ad1300..027c415c1d0f8f 100644
--- a/clang/lib/Headers/llvm_libc_wrappers/string.h
+++ b/clang/lib/Headers/llvm_libc_wrappers/string.h
@@ -13,22 +13,11 @@
#error "This file is for GPU offloading compilation only"
#endif
-// The GNU headers provide non C-standard headers when in C++ mode. Manually
-// undefine it here so that the definitions agree with the C standard for our
-// purposes.
-#ifdef __cplusplus
-extern "C" {
-#pragma push_macro("__cplusplus")
-#undef __cplusplus
-#endif
-
+// FIXME: The GNU headers provide C++ standard compliant headers when in C++
+// mode and the LLVM libc does not. We cannot enable memchr, strchr, strchrnul,
+// strpbrk, strrchr, strstr, or strcasestr until this is addressed.
#include_next <string.h>
-#pragma pop_macro("__cplusplus")
-#ifdef __cplusplus
-}
-#endif
-
#if __has_include(<llvm-libc-decls/string.h>)
#if defined(__HIP__) || defined(__CUDA__)
diff --git a/libc/config/gpu/entrypoints.txt b/libc/config/gpu/entrypoints.txt
index 4316f8a57a8731..e475c80d26b205 100644
--- a/libc/config/gpu/entrypoints.txt
+++ b/libc/config/gpu/entrypoints.txt
@@ -21,7 +21,6 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.string.bcmp
libc.src.string.bzero
libc.src.string.memccpy
- libc.src.string.memchr
libc.src.string.memcmp
libc.src.string.memcpy
libc.src.string.memmem
@@ -32,10 +31,7 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.string.stpcpy
libc.src.string.stpncpy
libc.src.string.strcasecmp
- libc.src.string.strcasestr
libc.src.string.strcat
- libc.src.string.strchr
- libc.src.string.strchrnul
libc.src.string.strcmp
libc.src.string.strcpy
libc.src.string.strcspn
@@ -47,10 +43,7 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.string.strncmp
libc.src.string.strncpy
libc.src.string.strnlen
- libc.src.string.strpbrk
- libc.src.string.strrchr
libc.src.string.strspn
- libc.src.string.strstr
libc.src.string.strtok
libc.src.string.strtok_r
diff --git a/libc/docs/gpu/support.rst b/libc/docs/gpu/support.rst
index bc94c833efeb70..1c7b2538fffd53 100644
--- a/libc/docs/gpu/support.rst
+++ b/libc/docs/gpu/support.rst
@@ -47,7 +47,7 @@ Function Name Available RPC Required
bcmp |check|
bzero |check|
memccpy |check|
-memchr |check|
+memchr
memcmp |check|
memcpy |check|
memmove |check|
@@ -57,7 +57,7 @@ memset |check|
stpcpy |check|
stpncpy |check|
strcat |check|
-strchr |check|
+strchr
strcmp |check|
strcpy |check|
strcspn |check|
@@ -68,10 +68,10 @@ strncat |check|
strncmp |check|
strncpy |check|
strnlen |check|
-strpbrk |check|
-strrchr |check|
+strpbrk
+strrchr
strspn |check|
-strstr |check|
+strstr
strtok |check|
strtok_r |check|
strdup
More information about the libc-commits
mailing list