[libcxx-commits] [libcxx] [libcxx]support freestanding libc++ (PR #208900)

via libcxx-commits libcxx-commits at lists.llvm.org
Sun Jul 12 08:27:55 PDT 2026


================
@@ -60,11 +60,49 @@ size_t strlen(const char* s);
 #    pragma GCC system_header
 #  endif
 
+#  include <stddef.h>
 #  if __has_include_next(<string.h>)
 #    include_next <string.h>
-#  endif
+#  else
+#    ifndef __cplusplus
+extern "C" {
+#    endif
 
-#  include <stddef.h>
+/*
+We offer declarations for these C functions,
+leaving the implementations to be handled by users.
+*/
+
+void* memcpy(void*, const void*, size_t);      /* freestanding */
+void* memmove(void*, const void*, size_t);     /* freestanding */
+char* strcpy(char*, const char*);              /* freestanding */
+char* strncpy(char*, const char*, size_t);     /* freestanding */
+char* strcat(char*, const char*);              /* freestanding */
+char* strncat(char*, const char*, size_t);     /* freestanding */
+int memcmp(const void*, const void*, size_t);  /* freestanding */
+int strcmp(const char*, const char*);          /* freestanding */
+int strncmp(const char*, const char*, size_t); /* freestanding */
+const void* memchr(const void*, int, size_t);  /* freestanding */
+void* memchr(void*, int, size_t);              /* freestanding */
+const char* strchr(const char*, int);          /* freestanding */
+char* strchr(char*, int);                      /* freestanding */
+size_t strcspn(const char*, const char*);      /* freestanding */
+const char* strpbrk(const char*, const char*); /* freestanding */
+char* strpbrk(char*, const char*);             /* freestanding */
+const char* strrchr(const char*, int);         /* freestanding */
+char* strrchr(char*, int);                     /* freestanding */
+size_t strspn(const char*, const char*);       /* freestanding */
+const char* strstr(const char*, const char*);  /* freestanding */
+char* strstr(char*, const char*);              /* freestanding */
+char* strtok(char*, const char*);              /* freestanding */
+void* memset(void*, int, size_t);              /* freestanding */
+size_t strlen(const char*);                    /* freestanding */
+void* memset_explicit(void*, int, size_t);     /* freestanding */
+
+#    ifndef __cplusplus
----------------
arhwx wrote:

Same inversion here.

https://github.com/llvm/llvm-project/pull/208900


More information about the libcxx-commits mailing list