diff --git a/libc/src/__support/ctype_utils.h b/libc/src/__support/ctype_utils.h --- a/libc/src/__support/ctype_utils.h +++ b/libc/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/libc/src/ctype/isalnum.cpp b/libc/src/ctype/isalnum.cpp --- a/libc/src/ctype/isalnum.cpp +++ b/libc/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(internal::isalnum(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isalpha.cpp b/libc/src/ctype/isalpha.cpp --- a/libc/src/ctype/isalpha.cpp +++ b/libc/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(internal::isalpha(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isascii.cpp b/libc/src/ctype/isascii.cpp --- a/libc/src/ctype/isascii.cpp +++ b/libc/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((c & (~0x7f)) == 0); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isblank.cpp b/libc/src/ctype/isblank.cpp --- a/libc/src/ctype/isblank.cpp +++ b/libc/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(c); - return ch == ' ' || ch == '\t'; + const unsigned char ch = static_cast(c); + return static_cast(ch == ' ' || ch == '\t'); } } // namespace __llvm_libc diff --git a/libc/src/ctype/iscntrl.cpp b/libc/src/ctype/iscntrl.cpp --- a/libc/src/ctype/iscntrl.cpp +++ b/libc/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(c); - return ch < 0x20 || ch == 0x7f; + const unsigned char ch = static_cast(c); + return static_cast(ch < 0x20 || ch == 0x7f); } } // namespace __llvm_libc diff --git a/libc/src/ctype/isdigit.cpp b/libc/src/ctype/isdigit.cpp --- a/libc/src/ctype/isdigit.cpp +++ b/libc/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(internal::isdigit(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isgraph.cpp b/libc/src/ctype/isgraph.cpp --- a/libc/src/ctype/isgraph.cpp +++ b/libc/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(internal::isgraph(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/islower.cpp b/libc/src/ctype/islower.cpp --- a/libc/src/ctype/islower.cpp +++ b/libc/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(internal::islower(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isprint.cpp b/libc/src/ctype/isprint.cpp --- a/libc/src/ctype/isprint.cpp +++ b/libc/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(c); + return static_cast((ch - ' ') < 95); } } // namespace __llvm_libc diff --git a/libc/src/ctype/ispunct.cpp b/libc/src/ctype/ispunct.cpp --- a/libc/src/ctype/ispunct.cpp +++ b/libc/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(c); + return static_cast(!internal::isalnum(ch) && internal::isgraph(ch)); } } // namespace __llvm_libc diff --git a/libc/src/ctype/isspace.cpp b/libc/src/ctype/isspace.cpp --- a/libc/src/ctype/isspace.cpp +++ b/libc/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(internal::isspace(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isupper.cpp b/libc/src/ctype/isupper.cpp --- a/libc/src/ctype/isupper.cpp +++ b/libc/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(internal::isupper(static_cast(c))); +} } // namespace __llvm_libc diff --git a/libc/src/ctype/isxdigit.cpp b/libc/src/ctype/isxdigit.cpp --- a/libc/src/ctype/isxdigit.cpp +++ b/libc/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(c); + return static_cast(internal::isdigit(ch) || (ch | 32) - 'a' < 6); } } // namespace __llvm_libc diff --git a/libc/src/ctype/tolower.cpp b/libc/src/ctype/tolower.cpp --- a/libc/src/ctype/tolower.cpp +++ b/libc/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/libc/src/ctype/toupper.cpp b/libc/src/ctype/toupper.cpp --- a/libc/src/ctype/toupper.cpp +++ b/libc/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; }