[llvm] r252563 - [PGO] Make indexed value profile data more compact

Diego Novillo via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 10 08:10:16 PST 2015


On Mon, Nov 9, 2015 at 7:24 PM, Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

+std::unique_ptr<ValueProfData>
> +ValueProfData::serializeFrom(const InstrProfRecord &Record) {
> +  uint32_t TotalSize = getSize(Record);
> +  std::unique_ptr<ValueProfData> VPD(
> +      reinterpret_cast<ValueProfData *>(new char[TotalSize]));
>

David, this is causing ASan failures on the LLVM testsuite.  Specifically,
this allocation via new[] is then deallocated with just delete by the
runtime std::unique_ptr support.  So, ASan complains with:

 ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new [] vs
operator delete) on 0x60200000ee90

    #0 0x4de26b in operator delete(void*)
llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:94:3
    #1 0x7dfaf0 in
std::unique_ptr<llvm::IndexedInstrProf::ValueProfData,
std::default_delete<llvm::IndexedInstrProf::ValueProfData>
>::~unique_ptr() [...]/bits/unique_ptr.h:236:4
    #2 0x7fd8c6 in (anonymous
namespace)::InstrProfRecordTrait::EmitData(llvm::raw_ostream&,
llvm::StringRef, llvm::SmallDenseMap<unsigned long,
llvm::InstrProfRecord, 1u, llvm::DenseMapInfo<unsigned long>,
llvm::detail::DenseMapPair<unsigned long, llvm::InstrProfRecord> >
const*, unsigned long) llvm/lib/ProfileData/InstrProfWriter.cpp:85:5

0x60200000ee90 is located 0 bytes inside of 8-byte region
[0x60200000ee90,0x60200000ee98)
allocated by thread T0 here:
    #0 0x4dde1b in operator new[](unsigned long)
llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:64:37
    #1 0x7de5e1 in
llvm::IndexedInstrProf::ValueProfData::serializeFrom(llvm::InstrProfRecord
const&) llvm/lib/ProfileData/InstrProf.cpp:251:41
    #2 0x7fd883 in (anonymous
namespace)::InstrProfRecordTrait::EmitData(llvm::raw_ostream&,
llvm::StringRef, llvm::SmallDenseMap<unsigned long,
llvm::InstrProfRecord, 1u, llvm::DenseMapInfo<unsigned long>,
llvm::detail::DenseMapPair<unsigned long, llvm::InstrProfRecord> >
const*, unsigned long) llvm/lib/ProfileData/InstrProfWriter.cpp:81:11



Not quite sure what the right fix for this usage pattern is wrt
std::unique_ptr.  Mind if I revert the patch while you find a fix?


Thanks.  Diego.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151110/3868be6e/attachment.html>


More information about the llvm-commits mailing list