[libc-commits] [libc] [libc]: implement 'iswalnum' entrypoint (PR #185581)
Mir Immad via libc-commits
libc-commits at lists.llvm.org
Tue Mar 10 09:04:13 PDT 2026
https://github.com/mirimmad updated https://github.com/llvm/llvm-project/pull/185581
>From d219e100661a4e4b79c252dd32e52004b07cb809 Mon Sep 17 00:00:00 2001
From: Immad Mir <mirimmad17 at gmail.com>
Date: Tue, 10 Mar 2026 11:35:08 +0530
Subject: [PATCH 1/5] libc: implement 'iswalnum' entrypoint
---
libc/config/baremetal/arm/entrypoints.txt | 4 ++++
libc/config/baremetal/riscv/entrypoints.txt | 1 +
libc/config/linux/aarch64/entrypoints.txt | 1 +
libc/config/linux/arm/entrypoints.txt | 1 +
libc/config/linux/riscv/entrypoints.txt | 1 +
libc/config/linux/x86_64/entrypoints.txt | 4 ++++
libc/include/wctype.yaml | 6 ++++++
libc/src/wctype/CMakeLists.txt | 14 +++++++++++-
libc/src/wctype/iswalnum.cpp | 20 +++++++++++++++++
libc/src/wctype/iswalnum.h | 20 +++++++++++++++++
libc/test/src/wctype/CMakeLists.txt | 10 +++++++++
libc/test/src/wctype/iswalnum_test.cpp | 24 +++++++++++++++++++++
12 files changed, 105 insertions(+), 1 deletion(-)
create mode 100644 libc/src/wctype/iswalnum.cpp
create mode 100644 libc/src/wctype/iswalnum.h
create mode 100644 libc/test/src/wctype/iswalnum_test.cpp
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 955dc643586e9..afa02d8cc57e6 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -299,7 +299,11 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
+<<<<<<< HEAD
libc.src.wctype.iswdigit
+=======
+ libc.src.wctype.iswalnum
+>>>>>>> 86c2324942f3 (libc: implement 'iswalnum' entrypoint)
# internal entrypoints
libc.startup.baremetal.init
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 472792e48fa01..753006a15753f 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -297,6 +297,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
libc.src.wctype.iswdigit
+ libc.src.wctype.iswalnum
# internal entrypoints
libc.startup.baremetal.init
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index bdca0baf478c7..5248b63408323 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -370,6 +370,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
libc.src.wctype.iswdigit
+ libc.src.wctype.iswalnum
# sys/uio.h entrypoints
libc.src.sys.uio.writev
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 3d3e77d826b06..84dba55b5780f 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -195,6 +195,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
libc.src.wctype.iswdigit
+ libc.src.wctype.iswalnum
)
if(LLVM_LIBC_FULL_BUILD)
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 13343dea76fe3..e69474eec628a 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -374,6 +374,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
libc.src.wctype.iswdigit
+ libc.src.wctype.iswalnum
# sys/uio.h entrypoints
libc.src.sys.uio.writev
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 24df7e63e3ebf..a70cb815fad0c 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -418,7 +418,11 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
+<<<<<<< HEAD
libc.src.wctype.iswdigit
+=======
+ libc.src.wctype.iswalnum
+>>>>>>> 86c2324942f3 (libc: implement 'iswalnum' entrypoint)
# sys/uio.h entrypoints
libc.src.sys.uio.writev
diff --git a/libc/include/wctype.yaml b/libc/include/wctype.yaml
index fb4f96f7d17e4..4b9e50ed89056 100644
--- a/libc/include/wctype.yaml
+++ b/libc/include/wctype.yaml
@@ -8,3 +8,9 @@ functions:
return_type: int
arguments:
- type: wint_t
+ - name: iswalnum
+ standards:
+ - stdc
+ return_type: int
+ arguments:
+ - type: wint_t
diff --git a/libc/src/wctype/CMakeLists.txt b/libc/src/wctype/CMakeLists.txt
index dc6282fac883f..0b47fe9d4c0f3 100644
--- a/libc/src/wctype/CMakeLists.txt
+++ b/libc/src/wctype/CMakeLists.txt
@@ -15,5 +15,17 @@ add_entrypoint_object(
HDRS
iswdigit.h
DEPENDS
- libc.src.__support.wctype_utils
+ libc.src.__support.wctype_utils
+ libc.hdr.types.wint_t
+)
+
+add_entrypoint_object(
+ iswalnum
+ SRCS
+ iswalnum.cpp
+ HDRS
+ iswalnum.h
+ DEPENDS
+ libc.src.__support.wctype_utils
+ libc.hdr.types.wint_t
)
diff --git a/libc/src/wctype/iswalnum.cpp b/libc/src/wctype/iswalnum.cpp
new file mode 100644
index 0000000000000..a9ada6bd65481
--- /dev/null
+++ b/libc/src/wctype/iswalnum.cpp
@@ -0,0 +1,20 @@
+//===-- Implementation of iswalnum ----------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+/**/
+#include "src/wctype/iswalnum.h"
+#include "src/__support/common.h"
+#include "src/__support/wctype_utils.h"
+
+#include "hdr/types/wint_t.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(int, iswalnum, (wint_t c)) {
+ return internal::isalnum(static_cast<wchar_t>(c));
+}
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/wctype/iswalnum.h b/libc/src/wctype/iswalnum.h
new file mode 100644
index 0000000000000..0f98189c6b5b1
--- /dev/null
+++ b/libc/src/wctype/iswalnum.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for iswalnum ----------------------*- C++ -*-===//
+//
+// 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_SRC_WCTYPE_ISWALNUM_H
+#define LLVM_LIBC_SRC_WCTYPE_ISWALNUM_H
+
+#include "hdr/types/wint_t.h"
+#include "src/__support/common.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int iswalnum(wint_t c);
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_WCTYPE_ISWALNUM_H
diff --git a/libc/test/src/wctype/CMakeLists.txt b/libc/test/src/wctype/CMakeLists.txt
index 5d46b1a61bbef..b7c6ccfd4dec1 100644
--- a/libc/test/src/wctype/CMakeLists.txt
+++ b/libc/test/src/wctype/CMakeLists.txt
@@ -21,3 +21,13 @@ add_libc_test(
libc.src.wctype.iswdigit
libc.src.__support.wctype_utils
)
+
+add_libc_test(
+ iswalnum_test
+ SUITE
+ libc_wctype_unittests
+ SRCS
+ iswalnum_test.cpp
+ DEPENDS
+ libc.src.wctype.iswalnum
+)
diff --git a/libc/test/src/wctype/iswalnum_test.cpp b/libc/test/src/wctype/iswalnum_test.cpp
new file mode 100644
index 0000000000000..f258da57f452c
--- /dev/null
+++ b/libc/test/src/wctype/iswalnum_test.cpp
@@ -0,0 +1,24 @@
+//===-- Unittests for iswalnum --------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/wctype/iswalnum.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibciswalnum, SimpleTest) {
+ EXPECT_NE(LIBC_NAMESPACE::iswalnum('A'), 0);
+ EXPECT_NE(LIBC_NAMESPACE::iswalnum('z'), 0);
+ EXPECT_NE(LIBC_NAMESPACE::iswalnum('0'), 0);
+
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum(' '), 0);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum('?'), 0);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum('\0'), 0);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum(-1), 0);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum('a'), 1);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum('Z'), 1);
+ EXPECT_EQ(LIBC_NAMESPACE::iswalnum('9'), 1);
+}
>From 4b67675bc2c0d5c65bb3b571465ec5c2ed41eb82 Mon Sep 17 00:00:00 2001
From: Immad Mir <mirimmad17 at gmail.com>
Date: Tue, 10 Mar 2026 11:41:53 +0530
Subject: [PATCH 2/5] add entrypoints for darwin and windows platform
---
libc/config/darwin/aarch64/entrypoints.txt | 1 +
libc/config/windows/entrypoints.txt | 1 +
2 files changed, 2 insertions(+)
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 051ab45f450fa..ffccd3909919e 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -103,6 +103,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
libc.src.wctype.iswdigit
+ libc.src.wctype.iswalnum
)
if(LLVM_LIBC_FULL_BUILD)
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index f777fc6c94bc2..36422378d70a2 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -108,6 +108,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
+ libc.src.wctype.isalnum
)
set(TARGET_LIBM_ENTRYPOINTS
>From 649ad208c75ba6b619850161b91a6899410514a6 Mon Sep 17 00:00:00 2001
From: Immad Mir <mirimmad17 at gmail.com>
Date: Tue, 10 Mar 2026 12:04:22 +0530
Subject: [PATCH 3/5] fix bad rebase
---
libc/config/baremetal/arm/entrypoints.txt | 3 ---
libc/config/linux/x86_64/entrypoints.txt | 3 ---
libc/src/wctype/CMakeLists.txt | 1 -
3 files changed, 7 deletions(-)
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index afa02d8cc57e6..c59779409762f 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -299,11 +299,8 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
-<<<<<<< HEAD
libc.src.wctype.iswdigit
-=======
libc.src.wctype.iswalnum
->>>>>>> 86c2324942f3 (libc: implement 'iswalnum' entrypoint)
# internal entrypoints
libc.startup.baremetal.init
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index a70cb815fad0c..715a5064793e7 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -418,11 +418,8 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
-<<<<<<< HEAD
libc.src.wctype.iswdigit
-=======
libc.src.wctype.iswalnum
->>>>>>> 86c2324942f3 (libc: implement 'iswalnum' entrypoint)
# sys/uio.h entrypoints
libc.src.sys.uio.writev
diff --git a/libc/src/wctype/CMakeLists.txt b/libc/src/wctype/CMakeLists.txt
index 0b47fe9d4c0f3..fa990f5248e60 100644
--- a/libc/src/wctype/CMakeLists.txt
+++ b/libc/src/wctype/CMakeLists.txt
@@ -16,7 +16,6 @@ add_entrypoint_object(
iswdigit.h
DEPENDS
libc.src.__support.wctype_utils
- libc.hdr.types.wint_t
)
add_entrypoint_object(
>From 4eb99744d6d90a8e6fde05dc7d7ad65904266b2a Mon Sep 17 00:00:00 2001
From: Immad Mir <mirimmad17 at gmail.com>
Date: Tue, 10 Mar 2026 12:14:53 +0530
Subject: [PATCH 4/5] fix windows entrypoint
---
libc/config/windows/entrypoints.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 36422378d70a2..526fd5e8a29ba 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -108,7 +108,7 @@ set(TARGET_LIBC_ENTRYPOINTS
# wctype.h entrypoints
libc.src.wctype.iswalpha
- libc.src.wctype.isalnum
+ libc.src.wctype.iswalnum
)
set(TARGET_LIBM_ENTRYPOINTS
>From fb3f21169fde7dc5e7fe1c25800fc7a3d456ff75 Mon Sep 17 00:00:00 2001
From: Immad Mir <mirimmad17 at gmail.com>
Date: Tue, 10 Mar 2026 21:33:51 +0530
Subject: [PATCH 5/5] fix wctype.yaml
---
libc/include/wctype.yaml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/libc/include/wctype.yaml b/libc/include/wctype.yaml
index eec21ea396270..91e84797d86db 100644
--- a/libc/include/wctype.yaml
+++ b/libc/include/wctype.yaml
@@ -20,10 +20,9 @@ functions:
return_type: int
arguments:
- type: wint_t
- - name: iswalnum
+ - name: iswalnum
standards:
- stdc
return_type: int
arguments:
- type: wint_t
-
More information about the libc-commits
mailing list