[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