Skip to content

Commit 425d2a8

Browse files
Add an assert on the generator side.
1 parent 384d082 commit 425d2a8

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

llvm/lib/ProfileData/InstrProfWriter.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)