diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2013-01-26 00:35:08 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2013-01-26 00:35:08 +0000 |
commit | 8334af8c2a88e59860e7aef2ec44a64df402cae1 (patch) | |
tree | d91e9f6c046ceeb6e8867ac147bc69fe1b862791 /clang/lib/Serialization/ASTReader.cpp | |
parent | 9a8ff813f34b39438b8042a6d784a4f2305b9fcc (diff) | |
download | bcm5719-llvm-8334af8c2a88e59860e7aef2ec44a64df402cae1.tar.gz bcm5719-llvm-8334af8c2a88e59860e7aef2ec44a64df402cae1.zip |
Preserve Sema::UndefinedInternals across PCH boundaries. Fixes
-Wundefined-internal warnings with PCH.
llvm-svn: 173538
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index fd1b8966ee2..0261ad8f483 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2461,7 +2461,24 @@ bool ASTReader::ReadASTBlock(ModuleFile &F) { for (unsigned I = 0, N = Record.size(); I != N; ++I) KnownNamespaces.push_back(getGlobalDeclID(F, Record[I])); break; - + + case UNDEFINED_INTERNALS: + if (UndefinedInternals.size() % 2 != 0) { + Error("Invalid existing UndefinedInternals"); + return true; + } + + if (Record.size() % 2 != 0) { + Error("invalid undefined internals record"); + return true; + } + for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) { + UndefinedInternals.push_back(getGlobalDeclID(F, Record[I++])); + UndefinedInternals.push_back( + ReadSourceLocation(F, Record, I).getRawEncoding()); + } + break; + case IMPORTED_MODULES: { if (F.Kind != MK_Module) { // If we aren't loading a module (which has its own exports), make @@ -5934,6 +5951,17 @@ void ASTReader::ReadKnownNamespaces( } } +void ASTReader::ReadUndefinedInternals( + llvm::MapVector<NamedDecl*, SourceLocation> &Undefined) { + for (unsigned Idx = 0, N = UndefinedInternals.size(); Idx != N;) { + NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedInternals[Idx++])); + SourceLocation Loc = + SourceLocation::getFromRawEncoding(UndefinedInternals[Idx++]); + Undefined.insert(std::make_pair(D, Loc)); + } +} + + void ASTReader::ReadTentativeDefinitions( SmallVectorImpl<VarDecl *> &TentativeDefs) { for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) { |