[libc-commits] [libc] c5e305c - [libc] Implement entrypoint and test of iswupper function (#185215)

via libc-commits libc-commits at lists.llvm.org
Fri Mar 13 07:23:10 PDT 2026


Author: csxplorer
Date: 2026-03-13T07:23:06-07:00
New Revision: c5e305c66bcb5bc88b978d9832004124110c1b5d

URL: https://github.com/llvm/llvm-project/commit/c5e305c66bcb5bc88b978d9832004124110c1b5d
DIFF: https://github.com/llvm/llvm-project/commit/c5e305c66bcb5bc88b978d9832004124110c1b5d.diff

LOG: [libc] Implement entrypoint and test of iswupper function (#185215)

Implement entrypoint and test of iswupper function (#185136)

Added: 
    libc/src/wctype/iswupper.cpp
    libc/src/wctype/iswupper.h
    libc/test/src/wctype/iswupper_test.cpp

Modified: 
    libc/config/baremetal/arm/entrypoints.txt
    libc/config/baremetal/riscv/entrypoints.txt
    libc/config/darwin/aarch64/entrypoints.txt
    libc/config/linux/aarch64/entrypoints.txt
    libc/config/linux/arm/entrypoints.txt
    libc/config/linux/riscv/entrypoints.txt
    libc/config/linux/x86_64/entrypoints.txt
    libc/config/windows/entrypoints.txt
    libc/include/wctype.yaml
    libc/src/wctype/CMakeLists.txt
    libc/test/src/wctype/CMakeLists.txt
    libc/test/src/wctype/iswalpha_test.cpp
    libc/test/src/wctype/iswdigit_test.cpp

Removed: 
    


################################################################################
diff  --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index c411959df8b78..8c945a91ea010 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -302,12 +302,12 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace
     libc.src.wctype.iswblank
     libc.src.wctype.iswxdigit
-
     # internal entrypoints
     libc.startup.baremetal.init
     libc.startup.baremetal.fini

diff  --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 13905eb254f58..d89b4d5af6289 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -299,6 +299,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 556381ce3c1e8..70322b3387cd3 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -105,6 +105,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index c8522b316269d..72d8c6d62d1c2 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -373,6 +373,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index cfcb57f73940d..8611082f87003 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -197,6 +197,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 9e049f277a165..612c097b0ca8b 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -377,6 +377,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 9faeaa31eb195..1a0905364682c 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -422,6 +422,7 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl
     libc.src.wctype.iswdigit
+    libc.src.wctype.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswlower
     libc.src.wctype.iswspace

diff  --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index f6cd9c9c6b414..02b56ab01081b 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.iswupper
     libc.src.wctype.iswalnum
     libc.src.wctype.iswgraph
     libc.src.wctype.iswcntrl

diff  --git a/libc/include/wctype.yaml b/libc/include/wctype.yaml
index 8b08209ae7f50..ca47cae27b640 100644
--- a/libc/include/wctype.yaml
+++ b/libc/include/wctype.yaml
@@ -8,6 +8,12 @@ functions:
     return_type: int
     arguments:
       - type: wint_t
+  - name: iswupper
+    standards:
+      - stdc
+    return_type: int
+    arguments:
+      - type: wint_t
   - name: iswcntrl
     standards:
       - stdc

diff  --git a/libc/src/wctype/CMakeLists.txt b/libc/src/wctype/CMakeLists.txt
index 47d87d620c026..73ec0eb9c857f 100644
--- a/libc/src/wctype/CMakeLists.txt
+++ b/libc/src/wctype/CMakeLists.txt
@@ -27,6 +27,7 @@ add_entrypoint_object(
     iswdigit.h
   DEPENDS
     libc.src.__support.wctype_utils
+    libc.hdr.types.wint_t
 )
 
 add_entrypoint_object(
@@ -95,3 +96,14 @@ add_entrypoint_object(
     libc.src.__support.wctype_utils
     libc.hdr.types.wint_t
 )
+
+add_entrypoint_object(
+  iswupper
+  SRCS
+    iswupper.cpp
+  HDRS
+    iswupper.h
+  DEPENDS
+    libc.hdr.types.wint_t
+    libc.src.__support.wctype_utils
+)

diff  --git a/libc/src/wctype/iswupper.cpp b/libc/src/wctype/iswupper.cpp
new file mode 100644
index 0000000000000..28c3161726936
--- /dev/null
+++ b/libc/src/wctype/iswupper.cpp
@@ -0,0 +1,21 @@
+//===-- Implementation of iswupper ----------------------------------------===//
+//
+// 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/iswupper.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, iswupper, (wint_t c)) {
+  return internal::isupper(static_cast<wchar_t>(c));
+}
+
+} // namespace LIBC_NAMESPACE_DECL

diff  --git a/libc/src/wctype/iswupper.h b/libc/src/wctype/iswupper.h
new file mode 100644
index 0000000000000..e630b42e2dcc9
--- /dev/null
+++ b/libc/src/wctype/iswupper.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for iswupper ----------------------*- 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_ISWUPPER_H
+#define LLVM_LIBC_SRC_WCTYPE_ISWUPPER_H
+
+#include "hdr/types/wint_t.h"
+#include "src/__support/common.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+int iswupper(wint_t c);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_WCTYPE_ISWUPPER_H

diff  --git a/libc/test/src/wctype/CMakeLists.txt b/libc/test/src/wctype/CMakeLists.txt
index 066ad7d79cdd5..65189a0d16d5a 100644
--- a/libc/test/src/wctype/CMakeLists.txt
+++ b/libc/test/src/wctype/CMakeLists.txt
@@ -91,3 +91,13 @@ add_libc_test(
   DEPENDS
     libc.src.wctype.iswalnum
 )
+
+add_libc_test(
+  iswupper_test
+  SUITE
+    libc_wctype_unittests
+  SRCS
+    iswupper_test.cpp
+  DEPENDS
+    libc.src.wctype.iswupper
+)

diff  --git a/libc/test/src/wctype/iswalpha_test.cpp b/libc/test/src/wctype/iswalpha_test.cpp
index 261e6fe53790a..eb2314c2ca3f6 100644
--- a/libc/test/src/wctype/iswalpha_test.cpp
+++ b/libc/test/src/wctype/iswalpha_test.cpp
@@ -6,7 +6,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "src/__support/CPP/span.h"
 #include "src/__support/wctype_utils.h"
 #include "src/wctype/iswalpha.h"
 

diff  --git a/libc/test/src/wctype/iswdigit_test.cpp b/libc/test/src/wctype/iswdigit_test.cpp
index d529f527e3591..d26ab5c92a46e 100644
--- a/libc/test/src/wctype/iswdigit_test.cpp
+++ b/libc/test/src/wctype/iswdigit_test.cpp
@@ -6,7 +6,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "src/__support/CPP/span.h"
 #include "src/wctype/iswdigit.h"
 
 #include "test/UnitTest/Test.h"

diff  --git a/libc/test/src/wctype/iswupper_test.cpp b/libc/test/src/wctype/iswupper_test.cpp
new file mode 100644
index 0000000000000..5d723ccf04a75
--- /dev/null
+++ b/libc/test/src/wctype/iswupper_test.cpp
@@ -0,0 +1,25 @@
+//===-- Unittests for iswupper --------------------------------------------===//
+//
+// 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/iswupper.h"
+
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibciswupper, SimpleTest) {
+  EXPECT_NE(LIBC_NAMESPACE::iswupper('B'), 0);
+
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper('a'), 0);
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper('3'), 0);
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper(' '), 0);
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper('?'), 0);
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper('\0'), 0);
+  EXPECT_EQ(LIBC_NAMESPACE::iswupper(-1), 0);
+}
+
+// Tests for the extended range are located in
+// libc/test/src/__support/wctype_utils_test.cpp.


        


More information about the libc-commits mailing list