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.
This commit is contained in:
parent
89f833588e
commit
cd7a7a56fc
@ -85,5 +85,10 @@ def TimeAPI : PublicAPI<"time.h"> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def UCharAPI : PublicAPI<"uchar.h"> {
|
def UCharAPI : PublicAPI<"uchar.h"> {
|
||||||
let Types = ["mbstate_t"];
|
let Types = [
|
||||||
|
"mbstate_t",
|
||||||
|
"char8_t",
|
||||||
|
"char16_t",
|
||||||
|
"char32_t",
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@ set(TARGET_PUBLIC_HEADERS
|
|||||||
libc.include.threads
|
libc.include.threads
|
||||||
libc.include.time
|
libc.include.time
|
||||||
libc.include.unistd
|
libc.include.unistd
|
||||||
|
libc.include.wchar
|
||||||
|
libc.include.uchar
|
||||||
|
|
||||||
libc.include.sys_ioctl
|
libc.include.sys_ioctl
|
||||||
# Disabled due to epoll_wait syscalls not being available on this platform.
|
# Disabled due to epoll_wait syscalls not being available on this platform.
|
||||||
|
@ -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"> {
|
def SysRandomAPI : PublicAPI<"sys/random.h"> {
|
||||||
let Types = ["size_t", "ssize_t"];
|
let Types = ["size_t", "ssize_t"];
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,8 @@ set(TARGET_PUBLIC_HEADERS
|
|||||||
libc.include.string
|
libc.include.string
|
||||||
libc.include.strings
|
libc.include.strings
|
||||||
libc.include.search
|
libc.include.search
|
||||||
|
libc.include.wchar
|
||||||
|
libc.include.uchar
|
||||||
|
|
||||||
# Disabled due to epoll_wait syscalls not being available on this platform.
|
# Disabled due to epoll_wait syscalls not being available on this platform.
|
||||||
# libc.include.sys_epoll
|
# libc.include.sys_epoll
|
||||||
|
@ -28,6 +28,7 @@ set(TARGET_PUBLIC_HEADERS
|
|||||||
libc.include.time
|
libc.include.time
|
||||||
libc.include.unistd
|
libc.include.unistd
|
||||||
libc.include.wchar
|
libc.include.wchar
|
||||||
|
libc.include.uchar
|
||||||
|
|
||||||
libc.include.arpa_inet
|
libc.include.arpa_inet
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ set(TARGET_PUBLIC_HEADERS
|
|||||||
libc.include.time
|
libc.include.time
|
||||||
libc.include.unistd
|
libc.include.unistd
|
||||||
libc.include.wchar
|
libc.include.wchar
|
||||||
|
libc.include.uchar
|
||||||
|
|
||||||
libc.include.arpa_inet
|
libc.include.arpa_inet
|
||||||
|
|
||||||
|
@ -158,4 +158,4 @@ Additions:
|
|||||||
|
|
||||||
* mbrtoc8
|
* mbrtoc8
|
||||||
* c8rtomb
|
* c8rtomb
|
||||||
* char*_t
|
* char*_t |check|
|
||||||
|
@ -603,6 +603,9 @@ add_gen_header(
|
|||||||
DEPENDS
|
DEPENDS
|
||||||
.llvm_libc_common_h
|
.llvm_libc_common_h
|
||||||
.llvm-libc-types.mbstate_t
|
.llvm-libc-types.mbstate_t
|
||||||
|
.llvm-libc-types.char8_t
|
||||||
|
.llvm-libc-types.char16_t
|
||||||
|
.llvm-libc-types.char32_t
|
||||||
)
|
)
|
||||||
|
|
||||||
add_gen_header(
|
add_gen_header(
|
||||||
|
@ -90,6 +90,21 @@ add_header(tcflag_t HDR tcflag_t.h)
|
|||||||
add_header(struct_termios HDR struct_termios.h DEPENDS .cc_t .speed_t .tcflag_t)
|
add_header(struct_termios HDR struct_termios.h DEPENDS .cc_t .speed_t .tcflag_t)
|
||||||
add_header(__getoptargv_t HDR __getoptargv_t.h)
|
add_header(__getoptargv_t HDR __getoptargv_t.h)
|
||||||
add_header(wchar_t HDR wchar_t.h)
|
add_header(wchar_t HDR wchar_t.h)
|
||||||
|
add_header(char8_t HDR char8_t.h)
|
||||||
|
add_header(
|
||||||
|
char16_t
|
||||||
|
HDR
|
||||||
|
char16_t.h
|
||||||
|
DEPENDS
|
||||||
|
libc.include.llvm-libc-macros.stdint_macros
|
||||||
|
)
|
||||||
|
add_header(
|
||||||
|
char32_t
|
||||||
|
HDR
|
||||||
|
char32_t.h
|
||||||
|
DEPENDS
|
||||||
|
libc.include.llvm-libc-macros.stdint_macros
|
||||||
|
)
|
||||||
add_header(wint_t HDR wint_t.h)
|
add_header(wint_t HDR wint_t.h)
|
||||||
add_header(sa_family_t HDR sa_family_t.h)
|
add_header(sa_family_t HDR sa_family_t.h)
|
||||||
add_header(socklen_t HDR socklen_t.h)
|
add_header(socklen_t HDR socklen_t.h)
|
||||||
|
17
libc/include/llvm-libc-types/char16_t.h
Normal file
17
libc/include/llvm-libc-types/char16_t.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//===-- Definition of char16_t type ---------------------------------------===//
|
||||||
|
//
|
||||||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_LIBC_TYPES_CHAR16_T_H
|
||||||
|
#define LLVM_LIBC_TYPES_CHAR16_T_H
|
||||||
|
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
||||||
|
#include "../llvm-libc-macros/stdint-macros.h"
|
||||||
|
typedef uint_least16_t char16_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_TYPES_CHAR16_T_H
|
17
libc/include/llvm-libc-types/char32_t.h
Normal file
17
libc/include/llvm-libc-types/char32_t.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//===-- Definition of char32_t type ---------------------------------------===//
|
||||||
|
//
|
||||||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_LIBC_TYPES_CHAR32_T_H
|
||||||
|
#define LLVM_LIBC_TYPES_CHAR32_T_H
|
||||||
|
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
||||||
|
#include "../llvm-libc-macros/stdint-macros.h"
|
||||||
|
typedef uint_least32_t char32_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_TYPES_CHAR32_T_H
|
17
libc/include/llvm-libc-types/char8_t.h
Normal file
17
libc/include/llvm-libc-types/char8_t.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//===-- Definition of char8_t type ----------------------------------------===//
|
||||||
|
//
|
||||||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_LIBC_TYPES_CHAR8_T_H
|
||||||
|
#define LLVM_LIBC_TYPES_CHAR8_T_H
|
||||||
|
|
||||||
|
#if !defined(__cplusplus) && defined(__STDC_VERSION__) && \
|
||||||
|
__STDC_VERSION__ >= 202311L
|
||||||
|
typedef unsigned char char8_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_TYPES_CHAR8_T_H
|
@ -65,6 +65,9 @@ def SizeTType : NamedType<"size_t">;
|
|||||||
def SizeTPtr : PtrType<SizeTType>;
|
def SizeTPtr : PtrType<SizeTType>;
|
||||||
def RestrictedSizeTPtr : RestrictedPtrType<SizeTType>;
|
def RestrictedSizeTPtr : RestrictedPtrType<SizeTType>;
|
||||||
|
|
||||||
|
def Char8TType : NamedType<"char8_t">;
|
||||||
|
def Char16TType : NamedType<"char16_t">;
|
||||||
|
def Char32TType : NamedType<"char32_t">;
|
||||||
def WCharType : NamedType<"wchar_t">;
|
def WCharType : NamedType<"wchar_t">;
|
||||||
def WIntType : NamedType<"wint_t">;
|
def WIntType : NamedType<"wint_t">;
|
||||||
|
|
||||||
|
@ -1398,6 +1398,9 @@ def StdC : StandardSpec<"stdc"> {
|
|||||||
[], // Macros
|
[], // Macros
|
||||||
[ //Types
|
[ //Types
|
||||||
MBStateTType,
|
MBStateTType,
|
||||||
|
Char8TType,
|
||||||
|
Char16TType,
|
||||||
|
Char32TType,
|
||||||
],
|
],
|
||||||
[], // Enumerations
|
[], // Enumerations
|
||||||
[]
|
[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user