From f6ac6bc24809eeb899815898f55e80d12c4b2804 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Mon, 21 Aug 2017 19:46:46 +0000 Subject: [PATCH] [BinaryStream] Defaultify copy and move constructors. The various BinaryStream classes had explicit copy constructors which resulted in deleted move constructors. This was causing the internal std::shared_ptr to get copied rather than moved very frequently, since these classes are often used as return values. Patch by Alex Telishev Differential Revision: https://reviews.llvm.org/D36942 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311368 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/BinaryStreamRef.h | 23 +++++++++++++++-------- lib/Support/BinaryStreamRef.cpp | 6 ------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/llvm/Support/BinaryStreamRef.h b/include/llvm/Support/BinaryStreamRef.h index 6d5135cb258..5679bd459ab 100644 --- a/include/llvm/Support/BinaryStreamRef.h +++ b/include/llvm/Support/BinaryStreamRef.h @@ -31,12 +31,11 @@ protected: BinaryStreamRefBase(StreamType &BorrowedImpl, uint32_t Offset, uint32_t Length) : BorrowedImpl(&BorrowedImpl), ViewOffset(Offset), Length(Length) {} - BinaryStreamRefBase(const BinaryStreamRefBase &Other) { - SharedImpl = Other.SharedImpl; - BorrowedImpl = Other.BorrowedImpl; - ViewOffset = Other.ViewOffset; - Length = Other.Length; - } + BinaryStreamRefBase(const BinaryStreamRefBase &Other) = default; + BinaryStreamRefBase &operator=(const BinaryStreamRefBase &Other) = default; + + BinaryStreamRefBase &operator=(BinaryStreamRefBase &&Other) = default; + BinaryStreamRefBase(BinaryStreamRefBase &&Other) = default; public: llvm::support::endianness getEndian() const { @@ -142,7 +141,10 @@ public: llvm::support::endianness Endian); explicit BinaryStreamRef(StringRef Data, llvm::support::endianness Endian); - BinaryStreamRef(const BinaryStreamRef &Other); + BinaryStreamRef(const BinaryStreamRef &Other) = default; + BinaryStreamRef &operator=(const BinaryStreamRef &Other) = default; + BinaryStreamRef(BinaryStreamRef &&Other) = default; + BinaryStreamRef &operator=(BinaryStreamRef &&Other) = default; // Use BinaryStreamRef.slice() instead. BinaryStreamRef(BinaryStreamRef &S, uint32_t Offset, @@ -203,7 +205,12 @@ public: uint32_t Length); explicit WritableBinaryStreamRef(MutableArrayRef Data, llvm::support::endianness Endian); - WritableBinaryStreamRef(const WritableBinaryStreamRef &Other); + WritableBinaryStreamRef(const WritableBinaryStreamRef &Other) = default; + WritableBinaryStreamRef & + operator=(const WritableBinaryStreamRef &Other) = default; + + WritableBinaryStreamRef(WritableBinaryStreamRef &&Other) = default; + WritableBinaryStreamRef &operator=(WritableBinaryStreamRef &&Other) = default; // Use WritableBinaryStreamRef.slice() instead. WritableBinaryStreamRef(WritableBinaryStreamRef &S, uint32_t Offset, diff --git a/lib/Support/BinaryStreamRef.cpp b/lib/Support/BinaryStreamRef.cpp index fe9a8171e14..70ee156f19f 100644 --- a/lib/Support/BinaryStreamRef.cpp +++ b/lib/Support/BinaryStreamRef.cpp @@ -77,9 +77,6 @@ BinaryStreamRef::BinaryStreamRef(StringRef Data, endianness Endian) : BinaryStreamRef(makeArrayRef(Data.bytes_begin(), Data.bytes_end()), Endian) {} -BinaryStreamRef::BinaryStreamRef(const BinaryStreamRef &Other) - : BinaryStreamRefBase(Other) {} - Error BinaryStreamRef::readBytes(uint32_t Offset, uint32_t Size, ArrayRef &Buffer) const { if (auto EC = checkOffset(Offset, Size)) @@ -117,9 +114,6 @@ WritableBinaryStreamRef::WritableBinaryStreamRef(MutableArrayRef Data, : BinaryStreamRefBase(std::make_shared(Data, Endian), 0, Data.size()) {} -WritableBinaryStreamRef::WritableBinaryStreamRef( - const WritableBinaryStreamRef &Other) - : BinaryStreamRefBase(Other) {} Error WritableBinaryStreamRef::writeBytes(uint32_t Offset, ArrayRef Data) const { -- 2.11.0