[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