From a69ba0a5f911ebdfd59b399e82ded8143e89e6cd Mon Sep 17 00:00:00 2001 From: Timm Baeder Date: Fri, 23 Aug 2024 09:16:22 +0200 Subject: [PATCH] [clang][bytecode][NFC] Get rid of const_casts in Move fns (#105698) --- clang/lib/AST/ByteCode/Descriptor.cpp | 23 ++++++++++------------- clang/lib/AST/ByteCode/Descriptor.h | 2 +- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/clang/lib/AST/ByteCode/Descriptor.cpp b/clang/lib/AST/ByteCode/Descriptor.cpp index 47b8885c9ae3..170203fe8187 100644 --- a/clang/lib/AST/ByteCode/Descriptor.cpp +++ b/clang/lib/AST/ByteCode/Descriptor.cpp @@ -31,10 +31,9 @@ static void dtorTy(Block *, std::byte *Ptr, const Descriptor *) { } template -static void moveTy(Block *, const std::byte *Src, std::byte *Dst, +static void moveTy(Block *, std::byte *Src, std::byte *Dst, const Descriptor *) { - // FIXME: Get rid of the const_cast. - auto *SrcPtr = reinterpret_cast(const_cast(Src)); + auto *SrcPtr = reinterpret_cast(Src); auto *DstPtr = reinterpret_cast(Dst); new (DstPtr) T(std::move(*SrcPtr)); } @@ -63,11 +62,9 @@ static void dtorArrayTy(Block *, std::byte *Ptr, const Descriptor *D) { } template -static void moveArrayTy(Block *, const std::byte *Src, std::byte *Dst, +static void moveArrayTy(Block *, std::byte *Src, std::byte *Dst, const Descriptor *D) { - // FIXME: Get rid of the const_cast. - InitMapPtr &SrcIMP = - *reinterpret_cast(const_cast(Src)); + InitMapPtr &SrcIMP = *reinterpret_cast(Src); if (SrcIMP) { // We only ever invoke the moveFunc when moving block contents to a // DeadBlock. DeadBlocks don't need InitMaps, so we destroy them here. @@ -76,7 +73,7 @@ static void moveArrayTy(Block *, const std::byte *Src, std::byte *Dst, Src += sizeof(InitMapPtr); Dst += sizeof(InitMapPtr); for (unsigned I = 0, NE = D->getNumElems(); I < NE; ++I) { - auto *SrcPtr = &reinterpret_cast(const_cast(Src))[I]; + auto *SrcPtr = &reinterpret_cast(Src)[I]; auto *DstPtr = &reinterpret_cast(Dst)[I]; new (DstPtr) T(std::move(*SrcPtr)); } @@ -126,7 +123,7 @@ static void dtorArrayDesc(Block *B, std::byte *Ptr, const Descriptor *D) { } } -static void moveArrayDesc(Block *B, const std::byte *Src, std::byte *Dst, +static void moveArrayDesc(Block *B, std::byte *Src, std::byte *Dst, const Descriptor *D) { const unsigned NumElems = D->getNumElems(); const unsigned ElemSize = @@ -134,11 +131,11 @@ static void moveArrayDesc(Block *B, const std::byte *Src, std::byte *Dst, unsigned ElemOffset = 0; for (unsigned I = 0; I < NumElems; ++I, ElemOffset += ElemSize) { - const auto *SrcPtr = Src + ElemOffset; + auto *SrcPtr = Src + ElemOffset; auto *DstPtr = Dst + ElemOffset; - const auto *SrcDesc = reinterpret_cast(SrcPtr); - const auto *SrcElemLoc = reinterpret_cast(SrcDesc + 1); + auto *SrcDesc = reinterpret_cast(SrcPtr); + auto *SrcElemLoc = reinterpret_cast(SrcDesc + 1); auto *DstDesc = reinterpret_cast(DstPtr); auto *DstElemLoc = reinterpret_cast(DstDesc + 1); @@ -233,7 +230,7 @@ static void dtorRecord(Block *B, std::byte *Ptr, const Descriptor *D) { destroyBase(B, Ptr, F.Desc, F.Offset); } -static void moveRecord(Block *B, const std::byte *Src, std::byte *Dst, +static void moveRecord(Block *B, std::byte *Src, std::byte *Dst, const Descriptor *D) { assert(D); assert(D->ElemRecord); diff --git a/clang/lib/AST/ByteCode/Descriptor.h b/clang/lib/AST/ByteCode/Descriptor.h index 41899c3bd683..82f90430f7f4 100644 --- a/clang/lib/AST/ByteCode/Descriptor.h +++ b/clang/lib/AST/ByteCode/Descriptor.h @@ -44,7 +44,7 @@ using BlockDtorFn = void (*)(Block *Storage, std::byte *FieldPtr, /// blocks are persisted: the move function copies all inline descriptors and /// non-trivial fields, as existing pointers might need to reference those /// descriptors. Data is not copied since it cannot be legally read. -using BlockMoveFn = void (*)(Block *Storage, const std::byte *SrcFieldPtr, +using BlockMoveFn = void (*)(Block *Storage, std::byte *SrcFieldPtr, std::byte *DstFieldPtr, const Descriptor *FieldDesc);