[llvm] r252783 - Refactoring and fix another instance of asan error
Xinliang David Li via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 11 11:31:53 PST 2015
Author: davidxl
Date: Wed Nov 11 13:31:53 2015
New Revision: 252783
URL: http://llvm.org/viewvc/llvm-project?rev=252783&view=rev
Log:
Refactoring and fix another instance of asan error
Modified:
llvm/trunk/lib/ProfileData/InstrProf.cpp
Modified: llvm/trunk/lib/ProfileData/InstrProf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=252783&r1=252782&r2=252783&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/InstrProf.cpp (original)
+++ llvm/trunk/lib/ProfileData/InstrProf.cpp Wed Nov 11 13:31:53 2015
@@ -244,12 +244,17 @@ void ValueProfData::deserializeTo(InstrP
}
}
+static ValueProfData *AllocValueProfData(uint32_t TotalSize) {
+ void *RawMem = ::operator new(TotalSize);
+ ValueProfData *VPDMem = new (RawMem) ValueProfData();
+ return VPDMem;
+}
+
std::unique_ptr<ValueProfData>
ValueProfData::serializeFrom(const InstrProfRecord &Record) {
uint32_t TotalSize = getSize(Record);
- void *RawMem = ::operator new(TotalSize);
- ValueProfData *VPDMem = new (RawMem) ValueProfData();
- std::unique_ptr<ValueProfData> VPD(VPDMem);
+
+ std::unique_ptr<ValueProfData> VPD(AllocValueProfData(TotalSize));
VPD->TotalSize = TotalSize;
VPD->NumValueKinds = Record.getNumValueKinds();
@@ -285,8 +290,8 @@ ValueProfData::getValueProfData(const un
if (TotalSize % sizeof(uint64_t))
return instrprof_error::malformed;
- std::unique_ptr<ValueProfData> VPD(
- reinterpret_cast<ValueProfData *>(new char[TotalSize]));
+ std::unique_ptr<ValueProfData> VPD(AllocValueProfData(TotalSize));
+
memcpy(VPD.get(), D, TotalSize);
// Byte swap.
VPD->swapBytesToHost(Endianness);
More information about the llvm-commits
mailing list