[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