Fix a longstanding (but previously unknown) bug in the lazy
deserialization of precompiled headers, where the deserialization of the source location entry for a buffer (e.g., macro instantiation scratch space) would overwrite a one-element FileID cache in the source manager. When tickled at the wrong time, we would return the wrong decomposed source location and eventually cause c-index-test to crash. Found by dumb luck. It's amazing this hasn't shown up before. llvm-svn: 98940
This commit is contained in:
parent
90a7859ebc
commit
51c2351d30
|
@ -411,7 +411,7 @@ FileID SourceManager::createFileID(const ContentCache *File,
|
|||
= SLocEntry::get(Offset, FileInfo::get(IncludePos, File, FileCharacter));
|
||||
SLocEntryLoaded[PreallocatedID] = true;
|
||||
FileID FID = FileID::get(PreallocatedID);
|
||||
return LastFileIDLookup = FID;
|
||||
return FID;
|
||||
}
|
||||
|
||||
SLocEntryTable.push_back(SLocEntry::get(NextOffset,
|
||||
|
|
|
@ -52,6 +52,12 @@ int main (int argc, const char * argv[]) {
|
|||
main(someEnum, (const char **)bee);
|
||||
}
|
||||
|
||||
#define CONCAT(X, Y) X##Y
|
||||
|
||||
void f() {
|
||||
int CONCAT(my,_var);
|
||||
}
|
||||
|
||||
// CHECK: [1:1 - 3:1] Invalid Cursor => NoDeclFound
|
||||
// CHECK: [3:1 - 7:1] ObjCInterfaceDecl=Foo:3:12
|
||||
// CHECK: [7:1 - 7:7] ObjCInstanceMethodDecl=foo:7:1
|
||||
|
|
Loading…
Reference in New Issue