diff options
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r-- | llvm/lib/MC/MCCodeView.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCCodeView.cpp b/llvm/lib/MC/MCCodeView.cpp index ec5dc20a13e..ac1acc08b0c 100644 --- a/llvm/lib/MC/MCCodeView.cpp +++ b/llvm/lib/MC/MCCodeView.cpp @@ -358,6 +358,13 @@ void CodeViewContext::encodeInlineLineTable(MCAsmLayout &Layout, SmallVectorImpl<char> &Buffer = Frag.getContents(); Buffer.clear(); // Clear old contents if we went through relaxation. for (const MCCVLineEntry &Loc : Locs) { + // Exit early if our line table would produce an oversized InlineSiteSym + // record. Account for the ChangeCodeLength annotation emitted after the + // loop ends. + size_t MaxBufferSize = MaxRecordLength - sizeof(InlineSiteSym::Hdr) - 8; + if (Buffer.size() >= MaxBufferSize) + break; + if (Loc.getFunctionId() == Frag.SiteFuncId) { CurSourceLoc.File = Loc.getFileNum(); CurSourceLoc.Line = Loc.getLine(); |