[compiler-rt] fd7c7ad - [scudo] Fix implicitly narrow casting (NFC)
Chia-hung Duan via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 14 11:59:23 PDT 2022
Author: Chia-hung Duan
Date: 2022-10-14T18:59:08Z
New Revision: fd7c7ad4fe0138314b922ea0db1691d5a679cc75
URL: https://github.com/llvm/llvm-project/commit/fd7c7ad4fe0138314b922ea0db1691d5a679cc75
DIFF: https://github.com/llvm/llvm-project/commit/fd7c7ad4fe0138314b922ea0db1691d5a679cc75.diff
LOG: [scudo] Fix implicitly narrow casting (NFC)
u16 may be promoted to int by arithmetic type conversion. Do an explicit
cast to avoid certain compiler's warning.
Differential Revision: https://reviews.llvm.org/D135945
Added:
Modified:
compiler-rt/lib/scudo/standalone/local_cache.h
compiler-rt/lib/scudo/standalone/primary32.h
compiler-rt/lib/scudo/standalone/primary64.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/local_cache.h b/compiler-rt/lib/scudo/standalone/local_cache.h
index 6e5b09fdb709e..6e84158659ae9 100644
--- a/compiler-rt/lib/scudo/standalone/local_cache.h
+++ b/compiler-rt/lib/scudo/standalone/local_cache.h
@@ -31,7 +31,8 @@ template <class SizeClassAllocator> struct SizeClassAllocatorLocalCache {
void appendFromArray(CompactPtrT *Array, u16 N) {
DCHECK_LE(N, MaxNumCached - Count);
memcpy(Batch + Count, Array, sizeof(Batch[0]) * N);
- Count += N;
+ // u16 will be promoted to int by arithmetic type conversion.
+ Count = static_cast<u16>(Count + N);
}
void clear() { Count = 0; }
void add(CompactPtrT P) {
@@ -189,7 +190,7 @@ template <class SizeClassAllocator> struct SizeClassAllocatorLocalCache {
for (uptr I = 0; I < NumClasses; I++) {
PerClass *P = &PerClassArray[I];
const uptr Size = SizeClassAllocator::getSizeByClassId(I);
- P->MaxCount = 2 * TransferBatch::getMaxCached(Size);
+ P->MaxCount = static_cast<u16>(2 * TransferBatch::getMaxCached(Size));
if (I != BatchClassId) {
P->ClassSize = Size;
} else {
@@ -221,7 +222,8 @@ template <class SizeClassAllocator> struct SizeClassAllocatorLocalCache {
NOINLINE void drain(PerClass *C, uptr ClassId) {
const u16 Count = Min(static_cast<u16>(C->MaxCount / 2), C->Count);
Allocator->pushBlocks(this, ClassId, &C->Chunks[0], Count);
- C->Count -= Count;
+ // u16 will be promoted to int by arithmetic type conversion.
+ C->Count = static_cast<u16>(C->Count - Count);
for (u16 I = 0; I < C->Count; I++)
C->Chunks[I] = C->Chunks[I + Count];
}
diff --git a/compiler-rt/lib/scudo/standalone/primary32.h b/compiler-rt/lib/scudo/standalone/primary32.h
index fb6cb53392358..c30f22f3fe990 100644
--- a/compiler-rt/lib/scudo/standalone/primary32.h
+++ b/compiler-rt/lib/scudo/standalone/primary32.h
@@ -436,7 +436,8 @@ template <typename Config> class SizeClassAllocator32 {
for (u32 I = 0; I < Size;) {
DCHECK_GE(BG->MaxCachedPerBatch, CurBatch->getCount());
- u16 UnusedSlots = BG->MaxCachedPerBatch - CurBatch->getCount();
+ u16 UnusedSlots =
+ static_cast<u16>(BG->MaxCachedPerBatch - CurBatch->getCount());
if (UnusedSlots == 0) {
CurBatch = C->createBatch(ClassId, reinterpret_cast<void *>(
decompactPtr(ClassId, Array[I])));
@@ -444,6 +445,7 @@ template <typename Config> class SizeClassAllocator32 {
Batches.push_front(CurBatch);
UnusedSlots = BG->MaxCachedPerBatch;
}
+ // `UnusedSlots` is u16 so the result will be also fit in u16.
u16 AppendSize = static_cast<u16>(Min<u32>(UnusedSlots, Size - I));
CurBatch->appendFromArray(&Array[I], AppendSize);
I += AppendSize;
diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h
index 2b6e71c8584ab..29d498f309a47 100644
--- a/compiler-rt/lib/scudo/standalone/primary64.h
+++ b/compiler-rt/lib/scudo/standalone/primary64.h
@@ -442,7 +442,8 @@ template <typename Config> class SizeClassAllocator64 {
for (u32 I = 0; I < Size;) {
DCHECK_GE(BG->MaxCachedPerBatch, CurBatch->getCount());
- u16 UnusedSlots = BG->MaxCachedPerBatch - CurBatch->getCount();
+ u16 UnusedSlots =
+ static_cast<u16>(BG->MaxCachedPerBatch - CurBatch->getCount());
if (UnusedSlots == 0) {
CurBatch = C->createBatch(ClassId, reinterpret_cast<void *>(
decompactPtr(ClassId, Array[I])));
More information about the llvm-commits
mailing list