[libc-commits] [libc] [libc]: implement 'iswalnum' entrypoint (PR #185581)

Mir Immad via libc-commits libc-commits at lists.llvm.org
Tue Mar 10 08:51:29 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/4] 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/4] 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/4] 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/4] 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



More information about the libc-commits mailing list