diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-01-05 22:33:30 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-01-05 22:33:30 +0000 |
commit | 1c7946a9fbba8671cc57f7dfd00721f8c035f913 (patch) | |
tree | a0171859616b7e64c4ef307227401e4d8c8288ab /lib/Serialization/ASTWriter.cpp | |
parent | b6b60c1521a2e65f60e93c5fd56c103cf027df63 (diff) |
Don't seed the ASTWriter's declaration -> ID mapping with the IDs of
each deserialized declaration, since that information is already
available in each declaration.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147619 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | lib/Serialization/ASTWriter.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 52578599ea..2afdc32db0 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -3729,6 +3729,12 @@ DeclID ASTWriter::GetDeclRef(const Decl *D) { if (D == 0) { return 0; } + + // If D comes from an AST file, its declaration ID is already known and + // fixed. + if (D->isFromASTFile()) + return D->getGlobalID(); + assert(!(reinterpret_cast<uintptr_t>(D) & 0x01) && "Invalid decl pointer"); DeclID &ID = DeclIDs[D]; if (ID == 0) { @@ -3745,6 +3751,11 @@ DeclID ASTWriter::getDeclID(const Decl *D) { if (D == 0) return 0; + // If D comes from an AST file, its declaration ID is already known and + // fixed. + if (D->isFromASTFile()) + return D->getGlobalID(); + assert(DeclIDs.find(D) != DeclIDs.end() && "Declaration not emitted!"); return DeclIDs[D]; } @@ -4273,10 +4284,6 @@ void ASTWriter::TypeRead(TypeIdx Idx, QualType T) { StoredIdx = Idx; } -void ASTWriter::DeclRead(DeclID ID, const Decl *D) { - DeclIDs[D] = ID; -} - void ASTWriter::SelectorRead(SelectorID ID, Selector S) { SelectorIDs[S] = ID; } |