Refactoring and fix another instance of asan error
authorXinliang David Li <davidxl@google.com>
Wed, 11 Nov 2015 19:31:53 +0000 (19:31 +0000)
committerXinliang David Li <davidxl@google.com>
Wed, 11 Nov 2015 19:31:53 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252783 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ProfileData/InstrProf.cpp

index 4f7328279e2396afdd47d2e9bfc7ee7da01649b1..ddd23014673af3ceabba41fcc5796de0d3ba451e 100644 (file)
@@ -244,12 +244,17 @@ void ValueProfData::deserializeTo(InstrProfRecord &Record,
   }
 }
 
+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 unsigned char *D,
   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);