[PATCH] D154850: [libc] Remove GPU string functions incompatible with C++
Joseph Huber via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 10 08:07:21 PDT 2023
jhuber6 created this revision.
jhuber6 added reviewers: jdoerfert, JonChesterfield, sivachandra, lntue, michaelrj, ronlieb.
Herald added projects: libc-project, All.
Herald added a subscriber: libc-commits.
jhuber6 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D154850
Files:
clang/lib/Headers/llvm_libc_wrappers/string.h
libc/config/gpu/entrypoints.txt
libc/docs/gpu/support.rst
Index: libc/docs/gpu/support.rst
===================================================================
--- libc/docs/gpu/support.rst
+++ libc/docs/gpu/support.rst
@@ -47,7 +47,7 @@
bcmp |check|
bzero |check|
memccpy |check|
-memchr |check|
+memchr
memcmp |check|
memcpy |check|
memmove |check|
@@ -57,7 +57,7 @@
stpcpy |check|
stpncpy |check|
strcat |check|
-strchr |check|
+strchr
strcmp |check|
strcpy |check|
strcspn |check|
@@ -68,10 +68,10 @@
strncmp |check|
strncpy |check|
strnlen |check|
-strpbrk |check|
-strrchr |check|
+strpbrk
+strrchr
strspn |check|
-strstr |check|
+strstr
strtok |check|
strtok_r |check|
strdup
Index: libc/config/gpu/entrypoints.txt
===================================================================
--- libc/config/gpu/entrypoints.txt
+++ libc/config/gpu/entrypoints.txt
@@ -21,7 +21,6 @@
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 @@
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 @@
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
Index: clang/lib/Headers/llvm_libc_wrappers/string.h
===================================================================
--- clang/lib/Headers/llvm_libc_wrappers/string.h
+++ 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__)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154850.538652.patch
Type: text/x-patch
Size: 2840 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230710/51bbe084/attachment-0001.bin>
More information about the cfe-commits
mailing list