mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Avoid UB in maxIntN(64).
Summary: Previously we were relying on 2's complement underflow in an int64_t. Now we cast to a uint64_t so we explicitly get the behavior we want. Reviewers: rnk Subscribers: dylanmckay, llvm-commits Differential Revision: https://reviews.llvm.org/D22445 llvm-svn: 275722
This commit is contained in:
parent
070918a523
commit
adedbb37b0
@ -344,7 +344,9 @@ inline int64_t minIntN(int64_t N) {
|
||||
inline int64_t maxIntN(int64_t N) {
|
||||
assert(N > 0 && N <= 64 && "integer width out of range");
|
||||
|
||||
return (INT64_C(1)<<(N-1)) - 1;
|
||||
// This relies on two's complement wraparound when N == 64, so we convert to
|
||||
// int64_t only at the very end to avoid UB.
|
||||
return (UINT64_C(1) << (N - 1)) - 1;
|
||||
}
|
||||
|
||||
/// isUIntN - Checks if an unsigned integer fits into the given (dynamic)
|
||||
|
Loading…
x
Reference in New Issue
Block a user