summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2013-01-26 00:35:08 +0000
committerNick Lewycky <nicholas@mxc.ca>2013-01-26 00:35:08 +0000
commit8334af8c2a88e59860e7aef2ec44a64df402cae1 (patch)
treed91e9f6c046ceeb6e8867ac147bc69fe1b862791 /clang/lib/Serialization/ASTReader.cpp
parent9a8ff813f34b39438b8042a6d784a4f2305b9fcc (diff)
downloadbcm5719-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.cpp30
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) {
OpenPOWER on IntegriCloud