This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG2c196bbc6bd8: Add an assertion in SmallVector::push_back() (authored by mehdi_amini).
Changed prior to commit: https://reviews.llvm.org/D84293?vs=305279&id=305281#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D84293/new/ https://reviews.llvm.org/D84293 Files: llvm/include/llvm/ADT/SmallVector.h llvm/include/llvm/MC/MCInst.h Index: llvm/include/llvm/MC/MCInst.h =================================================================== --- llvm/include/llvm/MC/MCInst.h +++ llvm/include/llvm/MC/MCInst.h @@ -181,7 +181,7 @@ MCOperand &getOperand(unsigned i) { return Operands[i]; } unsigned getNumOperands() const { return Operands.size(); } - void addOperand(const MCOperand &Op) { Operands.push_back(Op); } + void addOperand(const MCOperand Op) { Operands.push_back(Op); } using iterator = SmallVectorImpl<MCOperand>::iterator; using const_iterator = SmallVectorImpl<MCOperand>::const_iterator; Index: llvm/include/llvm/ADT/SmallVector.h =================================================================== --- llvm/include/llvm/ADT/SmallVector.h +++ llvm/include/llvm/ADT/SmallVector.h @@ -136,6 +136,13 @@ this->Size = this->Capacity = 0; // FIXME: Setting Capacity to 0 is suspect. } + void assertSafeToPush(const void *Elt) { + assert( + (Elt < begin() || Elt >= end() || this->size() < this->capacity()) && + "Attempting to push_back to the vector an element of the vector without" + " enough space reserved"); + } + public: using size_type = size_t; using difference_type = ptrdiff_t; @@ -251,6 +258,7 @@ public: void push_back(const T &Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); ::new ((void*) this->end()) T(Elt); @@ -258,6 +266,7 @@ } void push_back(T &&Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); ::new ((void*) this->end()) T(::std::move(Elt)); @@ -353,6 +362,7 @@ public: void push_back(const T &Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); memcpy(reinterpret_cast<void *>(this->end()), &Elt, sizeof(T));
Index: llvm/include/llvm/MC/MCInst.h =================================================================== --- llvm/include/llvm/MC/MCInst.h +++ llvm/include/llvm/MC/MCInst.h @@ -181,7 +181,7 @@ MCOperand &getOperand(unsigned i) { return Operands[i]; } unsigned getNumOperands() const { return Operands.size(); } - void addOperand(const MCOperand &Op) { Operands.push_back(Op); } + void addOperand(const MCOperand Op) { Operands.push_back(Op); } using iterator = SmallVectorImpl<MCOperand>::iterator; using const_iterator = SmallVectorImpl<MCOperand>::const_iterator; Index: llvm/include/llvm/ADT/SmallVector.h =================================================================== --- llvm/include/llvm/ADT/SmallVector.h +++ llvm/include/llvm/ADT/SmallVector.h @@ -136,6 +136,13 @@ this->Size = this->Capacity = 0; // FIXME: Setting Capacity to 0 is suspect. } + void assertSafeToPush(const void *Elt) { + assert( + (Elt < begin() || Elt >= end() || this->size() < this->capacity()) && + "Attempting to push_back to the vector an element of the vector without" + " enough space reserved"); + } + public: using size_type = size_t; using difference_type = ptrdiff_t; @@ -251,6 +258,7 @@ public: void push_back(const T &Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); ::new ((void*) this->end()) T(Elt); @@ -258,6 +266,7 @@ } void push_back(T &&Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); ::new ((void*) this->end()) T(::std::move(Elt)); @@ -353,6 +362,7 @@ public: void push_back(const T &Elt) { + this->assertSafeToPush(&Elt); if (LLVM_UNLIKELY(this->size() >= this->capacity())) this->grow(); memcpy(reinterpret_cast<void *>(this->end()), &Elt, sizeof(T));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits