@@ -601,7 +601,8 @@ writeMemProfCallStackArray(
601601 &MemProfCallStackData,
602602 llvm::DenseMap<memprof::FrameId, memprof::LinearFrameId>
603603 &MemProfFrameIndexes,
604- llvm::DenseMap<memprof::FrameId, memprof::FrameStat> &FrameHistogram) {
604+ llvm::DenseMap<memprof::FrameId, memprof::FrameStat> &FrameHistogram,
605+ unsigned &NumElements) {
605606 llvm::DenseMap<memprof::CallStackId, memprof::LinearCallStackId>
606607 MemProfCallStackIndexes;
607608
@@ -610,6 +611,7 @@ writeMemProfCallStackArray(
610611 FrameHistogram);
611612 for (auto I : Builder.getRadixArray ())
612613 OS.write32 (I);
614+ NumElements = Builder.getRadixArray ().size ();
613615 MemProfCallStackIndexes = Builder.takeCallStackPos ();
614616
615617 // Release the memory of this vector as it is no longer needed.
@@ -771,15 +773,26 @@ static Error writeMemProfV3(ProfOStream &OS,
771773 writeMemProfFrameArray (OS, MemProfData.Frames , FrameHistogram);
772774
773775 uint64_t CallStackPayloadOffset = OS.tell ();
776+ // The number of elements in the call stack array.
777+ unsigned NumElements;
774778 llvm::DenseMap<memprof::CallStackId, memprof::LinearCallStackId>
775- MemProfCallStackIndexes = writeMemProfCallStackArray (
776- OS, MemProfData.CallStacks , MemProfFrameIndexes, FrameHistogram);
779+ MemProfCallStackIndexes =
780+ writeMemProfCallStackArray (OS, MemProfData.CallStacks ,
781+ MemProfFrameIndexes, FrameHistogram,
782+ NumElements);
777783
778784 uint64_t RecordPayloadOffset = OS.tell ();
779785 uint64_t RecordTableOffset =
780786 writeMemProfRecords (OS, MemProfData.Records , &Schema, memprof::Version3,
781787 &MemProfCallStackIndexes);
782788
789+ // IndexedMemProfReader::deserializeV3 computes the number of elements in the
790+ // call stack array from the difference between CallStackPayloadOffset and
791+ // RecordPayloadOffset. Verify that the computation works.
792+ assert (CallStackPayloadOffset +
793+ NumElements * sizeof (memprof::LinearFrameId) ==
794+ RecordPayloadOffset);
795+
783796 uint64_t Header[] = {
784797 CallStackPayloadOffset,
785798 RecordPayloadOffset,
0 commit comments