diff options
author | Fabian Keßler <fabian_kessler@gmx.de> | 2024-05-01 00:08:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-30 15:08:38 -0700 |
commit | cd7a7a56fc73c73855036f77a4f69ea90c75c27a (patch) | |
tree | 198532b89e3bacd7eca2c9d6ad24349491c4e0ab /libc/config | |
parent | 89f833588e573b6b9762bb4eca5b08a5d7bad9c5 (diff) | |
download | llvm-cd7a7a56fc73c73855036f77a4f69ea90c75c27a.zip llvm-cd7a7a56fc73c73855036f77a4f69ea90c75c27a.tar.gz llvm-cd7a7a56fc73c73855036f77a4f69ea90c75c27a.tar.bz2 |
Add basic char*_t support for libc (partial WG14 N2653) (#90360)
This PR implements a part of WG14 N2653:
- Define C23 char8_t
- Define C11 char16_t
- Define C11 char32_t
Missing goals are:
- The type of UTF-8 character literals is changed from unsigned char to
char8_t. (Since UTF-8 character literals already have type unsigned
char, this is not a semantic change).
- New mbrtoc8() and c8rtomb() functions declared in <uchar.h> enable
conversions between multibyte characters and UTF-8.
- A new ATOMIC_CHAR8_T_LOCK_FREE macro.
- A new atomic_char8_t typedef name.
Diffstat (limited to 'libc/config')
-rw-r--r-- | libc/config/baremetal/api.td | 7 | ||||
-rw-r--r-- | libc/config/linux/aarch64/headers.txt | 2 | ||||
-rw-r--r-- | libc/config/linux/api.td | 9 | ||||
-rw-r--r-- | libc/config/linux/arm/headers.txt | 2 | ||||
-rw-r--r-- | libc/config/linux/riscv/headers.txt | 1 | ||||
-rw-r--r-- | libc/config/linux/x86_64/headers.txt | 1 |
6 files changed, 21 insertions, 1 deletions
diff --git a/libc/config/baremetal/api.td b/libc/config/baremetal/api.td index 25aa06a..a6547d8 100644 --- a/libc/config/baremetal/api.td +++ b/libc/config/baremetal/api.td @@ -85,5 +85,10 @@ def TimeAPI : PublicAPI<"time.h"> { } def UCharAPI : PublicAPI<"uchar.h"> { - let Types = ["mbstate_t"]; + let Types = [ + "mbstate_t", + "char8_t", + "char16_t", + "char32_t", + ]; } diff --git a/libc/config/linux/aarch64/headers.txt b/libc/config/linux/aarch64/headers.txt index 47db443..7d25877 100644 --- a/libc/config/linux/aarch64/headers.txt +++ b/libc/config/linux/aarch64/headers.txt @@ -25,6 +25,8 @@ set(TARGET_PUBLIC_HEADERS libc.include.threads libc.include.time libc.include.unistd + libc.include.wchar + libc.include.uchar libc.include.sys_ioctl # Disabled due to epoll_wait syscalls not being available on this platform. diff --git a/libc/config/linux/api.td b/libc/config/linux/api.td index 7843513..902839b 100644 --- a/libc/config/linux/api.td +++ b/libc/config/linux/api.td @@ -206,6 +206,15 @@ def WCharAPI : PublicAPI<"wchar.h"> { ]; } +def UCharAPI : PublicAPI<"uchar.h"> { + let Types = [ + "mbstate_t", + "char8_t", + "char16_t", + "char32_t", + ]; +} + def SysRandomAPI : PublicAPI<"sys/random.h"> { let Types = ["size_t", "ssize_t"]; } diff --git a/libc/config/linux/arm/headers.txt b/libc/config/linux/arm/headers.txt index 307bb6b..1180564 100644 --- a/libc/config/linux/arm/headers.txt +++ b/libc/config/linux/arm/headers.txt @@ -12,6 +12,8 @@ set(TARGET_PUBLIC_HEADERS libc.include.string libc.include.strings libc.include.search + libc.include.wchar + libc.include.uchar # Disabled due to epoll_wait syscalls not being available on this platform. # libc.include.sys_epoll diff --git a/libc/config/linux/riscv/headers.txt b/libc/config/linux/riscv/headers.txt index c858bcc..da203e98 100644 --- a/libc/config/linux/riscv/headers.txt +++ b/libc/config/linux/riscv/headers.txt @@ -28,6 +28,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.time libc.include.unistd libc.include.wchar + libc.include.uchar libc.include.arpa_inet diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt index e51c793..44d640b 100644 --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -29,6 +29,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.time libc.include.unistd libc.include.wchar + libc.include.uchar libc.include.arpa_inet |