зеркало из https://github.com/microsoft/clang-1.git
For source location entries that describe instantiations, encode the
token length in the PCH file rather than trying (and failing) to reconstruct it be getting the spelling token's length. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69191 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
1f0d0133b0
Коммит
f60e991869
|
@ -635,6 +635,8 @@ public:
|
|||
return SLocEntryTable[FID.ID];
|
||||
}
|
||||
|
||||
unsigned getNextOffset() const { return NextOffset; }
|
||||
|
||||
private:
|
||||
friend class SrcMgr::ContentCache; // Used for deserialization.
|
||||
|
||||
|
|
|
@ -612,9 +612,7 @@ PCHReader::PCHReadResult PCHReader::ReadSourceManagerBlock() {
|
|||
SpellingLoc,
|
||||
SourceLocation::getFromRawEncoding(Record[2]),
|
||||
SourceLocation::getFromRawEncoding(Record[3]),
|
||||
Lexer::MeasureTokenLength(SpellingLoc,
|
||||
SourceMgr,
|
||||
PP.getLangOptions()));
|
||||
Record[4]);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -736,6 +736,7 @@ static unsigned CreateSLocInstantiationAbbrev(llvm::BitstreamWriter &S) {
|
|||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Spelling location
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Start location
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // End location
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Token length
|
||||
return S.EmitAbbrev(Abbrev);
|
||||
}
|
||||
|
||||
|
@ -818,6 +819,13 @@ void PCHWriter::WriteSourceManagerBlock(SourceManager &SourceMgr) {
|
|||
Record.push_back(Inst.getInstantiationLocStart().getRawEncoding());
|
||||
Record.push_back(Inst.getInstantiationLocEnd().getRawEncoding());
|
||||
|
||||
// Compute the token length for this macro expansion.
|
||||
unsigned NextOffset = SourceMgr.getNextOffset();
|
||||
SourceManager::sloc_entry_iterator NextSLoc = SLoc;
|
||||
if (++NextSLoc != SLocEnd)
|
||||
NextOffset = NextSLoc->getOffset();
|
||||
Record.push_back(NextOffset - SLoc->getOffset() - 1);
|
||||
|
||||
if (SLocInstantiationAbbrv == -1)
|
||||
SLocInstantiationAbbrv = CreateSLocInstantiationAbbrev(S);
|
||||
S.EmitRecordWithAbbrev(SLocInstantiationAbbrv, Record);
|
||||
|
|
Загрузка…
Ссылка в новой задаче