From 7cbcc581a5bf4b736579ec17cd87c0ae10ace516 Mon Sep 17 00:00:00 2001 From: Tue Ly Date: Tue, 23 May 2023 13:34:12 -0400 Subject: [PATCH] [libc] Change UInt integer conversion operators to use standard types. This fixes an issue with missing `unsigned long` conversion on macOS. Reviewed By: michaelrj Differential Revision: https://reviews.llvm.org/D151234 --- libc/src/__support/UInt.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libc/src/__support/UInt.h b/libc/src/__support/UInt.h index a702aaa..d36d8f9 100644 --- a/libc/src/__support/UInt.h +++ b/libc/src/__support/UInt.h @@ -77,18 +77,24 @@ template struct UInt { val[i] = words[i]; } - constexpr explicit operator uint64_t() const { return val[0]; } + constexpr explicit operator unsigned long long() const { + return static_cast(val[0]); + } + + constexpr explicit operator unsigned long() const { + return static_cast(val[0]); + } - constexpr explicit operator uint32_t() const { - return uint32_t(uint64_t(*this)); + constexpr explicit operator unsigned int() const { + return static_cast(val[0]); } - constexpr explicit operator uint16_t() const { - return uint16_t(uint64_t(*this)); + constexpr explicit operator unsigned short() const { + return static_cast(val[0]); } - constexpr explicit operator uint8_t() const { - return uint8_t(uint64_t(*this)); + constexpr explicit operator unsigned char() const { + return static_cast(val[0]); } constexpr explicit operator bool() const { return !is_zero(); } -- 2.7.4