Author: Fangrui Song Date: 2022-09-08T13:49:07-07:00 New Revision: 2f23dc9127e6c0ef392f163cbaa58afcb7b61a09
URL: https://github.com/llvm/llvm-project/commit/2f23dc9127e6c0ef392f163cbaa58afcb7b61a09 DIFF: https://github.com/llvm/llvm-project/commit/2f23dc9127e6c0ef392f163cbaa58afcb7b61a09.diff LOG: [AST/Interp] Fix left shift overflow bug in D64146 Noticed by Dmitri Gribenko Added: Modified: clang/lib/AST/Interp/Descriptor.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Descriptor.cpp b/clang/lib/AST/Interp/Descriptor.cpp index 2098ae778a87..34240ed4352d 100644 --- a/clang/lib/AST/Interp/Descriptor.cpp +++ b/clang/lib/AST/Interp/Descriptor.cpp @@ -269,7 +269,7 @@ InitMap::T *InitMap::data() { bool InitMap::initialize(unsigned I) { unsigned Bucket = I / PER_FIELD; - unsigned Mask = 1ull << static_cast<uint64_t>(I % PER_FIELD); + T Mask = T(1) << (I % PER_FIELD); if (!(data()[Bucket] & Mask)) { data()[Bucket] |= Mask; UninitFields -= 1; @@ -279,8 +279,7 @@ bool InitMap::initialize(unsigned I) { bool InitMap::isInitialized(unsigned I) { unsigned Bucket = I / PER_FIELD; - unsigned Mask = 1ull << static_cast<uint64_t>(I % PER_FIELD); - return data()[Bucket] & Mask; + return data()[Bucket] & (T(1) << (I % PER_FIELD)); } InitMap *InitMap::allocate(unsigned N) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits