forked from OSchip/llvm-project
[ASTReader] Sort RawComments before merging
`RawComments` are sorted by comparing underlying `SourceLocation`'s. This is done by comparing `FileID` and `Offset`; when the `FileID` is the same it means the locations are within the same TU and the `Offset` is used. FileID, from the source code: "A mostly-opaque identifier, where 0 is "invalid", >0 is this module, and <-1 is something loaded from another module.". That said, when de-serializing SourceLocations, FileID's from RawComments loaded from other modules get negative IDs where previously they were positive. This makes imported RawComments unsorted, leading to a wrong merge with other comments from the current TU. Fix that by sorting RawComments properly after de-serialization and before merge. This fixes an assertion in `ASTContext::getRawCommentForDeclNoCache`, which fires only in a debug build of clang. Differential Revision: https://reviews.llvm.org/D27546 rdar://problem/29287314 llvm-svn: 290134
This commit is contained in:
parent
20565e2aa1
commit
c23af5707d
|
@ -8471,6 +8471,10 @@ void ASTReader::ReadComments() {
|
|||
}
|
||||
}
|
||||
NextCursor:
|
||||
// De-serialized SourceLocations get negative FileIDs for other modules,
|
||||
// potentially invalidating the original order. Sort it again.
|
||||
std::sort(Comments.begin(), Comments.end(),
|
||||
BeforeThanCompare<RawComment>(SourceMgr));
|
||||
Context.Comments.addDeserializedComments(Comments);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue