[clang] b454e7a - [libc] Remove GPU string functions incompatible with C++

Joseph Huber via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 10 08:40:22 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 cfe-commits mailing list