[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