[libc][NFC] Add explicit casts to ctype functions

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D106902

GitOrigin-RevId: 9cdd4ea06f094efaedb46e848e004baaad7cb183
diff --git a/src/__support/ctype_utils.h b/src/__support/ctype_utils.h
index 65b6ca0..f3f4b36 100644
--- a/src/__support/ctype_utils.h
+++ b/src/__support/ctype_utils.h
@@ -18,19 +18,21 @@
 // of a function call by inlining them.
 // ------------------------------------------------------
 
-static constexpr int isalpha(unsigned ch) { return (ch | 32) - 'a' < 26; }
+static constexpr bool isalpha(unsigned ch) { return (ch | 32) - 'a' < 26; }
 
-static constexpr int isdigit(unsigned ch) { return (ch - '0') < 10; }
+static constexpr bool isdigit(unsigned ch) { return (ch - '0') < 10; }
 
-static constexpr int isalnum(unsigned ch) { return isalpha(ch) || isdigit(ch); }
+static constexpr bool isalnum(unsigned ch) {
+  return isalpha(ch) || isdigit(ch);
+}
 
-static constexpr int isgraph(unsigned ch) { return 0x20 < ch && ch < 0x7f; }
+static constexpr bool isgraph(unsigned ch) { return 0x20 < ch && ch < 0x7f; }
 
-static constexpr int islower(unsigned ch) { return (ch - 'a') < 26; }
+static constexpr bool islower(unsigned ch) { return (ch - 'a') < 26; }
 
-static constexpr int isupper(unsigned ch) { return (ch - 'A') < 26; }
+static constexpr bool isupper(unsigned ch) { return (ch - 'A') < 26; }
 
-static constexpr int isspace(unsigned ch) {
+static constexpr bool isspace(unsigned ch) {
   return ch == ' ' || (ch - '\t') < 5;
 }
 
diff --git a/src/ctype/isalnum.cpp b/src/ctype/isalnum.cpp
index 07ff54a..ce3608f 100644
--- a/src/ctype/isalnum.cpp
+++ b/src/ctype/isalnum.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isalnum, (int c)) { return internal::isalnum(c); }
+LLVM_LIBC_FUNCTION(int, isalnum, (int c)) {
+  return static_cast<int>(internal::isalnum(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isalpha.cpp b/src/ctype/isalpha.cpp
index 9e2b7a7..37f80f9 100644
--- a/src/ctype/isalpha.cpp
+++ b/src/ctype/isalpha.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isalpha, (int c)) { return internal::isalpha(c); }
+LLVM_LIBC_FUNCTION(int, isalpha, (int c)) {
+  return static_cast<int>(internal::isalpha(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isascii.cpp b/src/ctype/isascii.cpp
index c12915e..8357563 100644
--- a/src/ctype/isascii.cpp
+++ b/src/ctype/isascii.cpp
@@ -12,6 +12,8 @@
 
 namespace __llvm_libc {
 
-LLVM_LIBC_FUNCTION(int, isascii, (int c)) { return (c & (~0x7f)) == 0; }
+LLVM_LIBC_FUNCTION(int, isascii, (int c)) {
+  return static_cast<int>((c & (~0x7f)) == 0);
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isblank.cpp b/src/ctype/isblank.cpp
index 1c30613..eed838c 100644
--- a/src/ctype/isblank.cpp
+++ b/src/ctype/isblank.cpp
@@ -15,8 +15,8 @@
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, isblank, (int c)) {
-  const unsigned char ch = static_cast<char>(c);
-  return ch == ' ' || ch == '\t';
+  const unsigned char ch = static_cast<unsigned char>(c);
+  return static_cast<int>(ch == ' ' || ch == '\t');
 }
 
 } // namespace __llvm_libc
diff --git a/src/ctype/iscntrl.cpp b/src/ctype/iscntrl.cpp
index b061199..6c471a5 100644
--- a/src/ctype/iscntrl.cpp
+++ b/src/ctype/iscntrl.cpp
@@ -15,8 +15,8 @@
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, iscntrl, (int c)) {
-  const unsigned char ch = static_cast<char>(c);
-  return ch < 0x20 || ch == 0x7f;
+  const unsigned char ch = static_cast<unsigned char>(c);
+  return static_cast<int>(ch < 0x20 || ch == 0x7f);
 }
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isdigit.cpp b/src/ctype/isdigit.cpp
index 79a8b10..b478384 100644
--- a/src/ctype/isdigit.cpp
+++ b/src/ctype/isdigit.cpp
@@ -14,6 +14,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isdigit, (int c)) { return internal::isdigit(c); }
+LLVM_LIBC_FUNCTION(int, isdigit, (int c)) {
+  return static_cast<int>(internal::isdigit(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isgraph.cpp b/src/ctype/isgraph.cpp
index 8d0bb38..6a1f55e 100644
--- a/src/ctype/isgraph.cpp
+++ b/src/ctype/isgraph.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isgraph, (int c)) { return internal::isgraph(c); }
+LLVM_LIBC_FUNCTION(int, isgraph, (int c)) {
+  return static_cast<int>(internal::isgraph(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/islower.cpp b/src/ctype/islower.cpp
index 73ce42e..b21ccd4 100644
--- a/src/ctype/islower.cpp
+++ b/src/ctype/islower.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, islower, (int c)) { return internal::islower(c); }
+LLVM_LIBC_FUNCTION(int, islower, (int c)) {
+  return static_cast<int>(internal::islower(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isprint.cpp b/src/ctype/isprint.cpp
index a80500b..dd9a085 100644
--- a/src/ctype/isprint.cpp
+++ b/src/ctype/isprint.cpp
@@ -15,8 +15,8 @@
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, isprint, (int c)) {
-  const unsigned ch = c;
-  return (ch - ' ') < 95;
+  const unsigned ch = static_cast<unsigned>(c);
+  return static_cast<int>((ch - ' ') < 95);
 }
 
 } // namespace __llvm_libc
diff --git a/src/ctype/ispunct.cpp b/src/ctype/ispunct.cpp
index 46c2fec..7ccad4b 100644
--- a/src/ctype/ispunct.cpp
+++ b/src/ctype/ispunct.cpp
@@ -16,7 +16,8 @@
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, ispunct, (int c)) {
-  return !internal::isalnum(c) && internal::isgraph(c);
+  const unsigned ch = static_cast<unsigned>(c);
+  return static_cast<int>(!internal::isalnum(ch) && internal::isgraph(ch));
 }
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isspace.cpp b/src/ctype/isspace.cpp
index ae86491..8cd76c4 100644
--- a/src/ctype/isspace.cpp
+++ b/src/ctype/isspace.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isspace, (int c)) { return internal::isspace(c); }
+LLVM_LIBC_FUNCTION(int, isspace, (int c)) {
+  return static_cast<int>(internal::isspace(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isupper.cpp b/src/ctype/isupper.cpp
index bf3c0cf..dcb4cf1 100644
--- a/src/ctype/isupper.cpp
+++ b/src/ctype/isupper.cpp
@@ -15,6 +15,8 @@
 
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
-LLVM_LIBC_FUNCTION(int, isupper, (int c)) { return internal::isupper(c); }
+LLVM_LIBC_FUNCTION(int, isupper, (int c)) {
+  return static_cast<int>(internal::isupper(static_cast<unsigned>(c)));
+}
 
 } // namespace __llvm_libc
diff --git a/src/ctype/isxdigit.cpp b/src/ctype/isxdigit.cpp
index e2a618d..96efc8f 100644
--- a/src/ctype/isxdigit.cpp
+++ b/src/ctype/isxdigit.cpp
@@ -16,8 +16,8 @@
 // TODO: Currently restricted to default locale.
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, isxdigit, (int c)) {
-  const unsigned ch = c;
-  return internal::isdigit(ch) || (ch | 32) - 'a' < 6;
+  const unsigned ch = static_cast<unsigned>(c);
+  return static_cast<int>(internal::isdigit(ch) || (ch | 32) - 'a' < 6);
 }
 
 } // namespace __llvm_libc
diff --git a/src/ctype/tolower.cpp b/src/ctype/tolower.cpp
index 140c548..8fbb5aa 100644
--- a/src/ctype/tolower.cpp
+++ b/src/ctype/tolower.cpp
@@ -17,7 +17,7 @@
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, tolower, (int c)) {
   if (internal::isupper(c))
-    return c + 'a' - 'A';
+    return c + ('a' - 'A');
   return c;
 }
 
diff --git a/src/ctype/toupper.cpp b/src/ctype/toupper.cpp
index d2491ce..b216cc2 100644
--- a/src/ctype/toupper.cpp
+++ b/src/ctype/toupper.cpp
@@ -17,7 +17,7 @@
 // These should be extended using locale information.
 LLVM_LIBC_FUNCTION(int, toupper, (int c)) {
   if (internal::islower(c))
-    return c + 'A' - 'a';
+    return c - ('a' - 'A');
   return c;
 }