Preserve Sema::UndefinedInternals across PCH boundaries. Fixes
-Wundefined-internal warnings with PCH.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173538 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp
index 5a690b3..d398153 100644
--- a/lib/Serialization/ASTWriter.cpp
+++ b/lib/Serialization/ASTWriter.cpp
@@ -824,6 +824,7 @@
RECORD(OPENCL_EXTENSIONS);
RECORD(DELEGATING_CTORS);
RECORD(KNOWN_NAMESPACES);
+ RECORD(UNDEFINED_INTERNALS);
RECORD(MODULE_OFFSET_MAP);
RECORD(SOURCE_MANAGER_LINE_TABLE);
RECORD(OBJC_CATEGORIES_MAP);
@@ -3581,7 +3582,7 @@
// Build a record containing all of the known namespaces.
RecordData KnownNamespaces;
- for (llvm::DenseMap<NamespaceDecl*, bool>::iterator
+ for (llvm::MapVector<NamespaceDecl*, bool>::iterator
I = SemaRef.KnownNamespaces.begin(),
IEnd = SemaRef.KnownNamespaces.end();
I != IEnd; ++I) {
@@ -3589,6 +3590,16 @@
AddDeclRef(I->first, KnownNamespaces);
}
+ // Build a record of all used, undefined objects with internal linkage.
+ RecordData UndefinedInternals;
+ for (llvm::MapVector<NamedDecl*, SourceLocation>::iterator
+ I = SemaRef.UndefinedInternals.begin(),
+ IEnd = SemaRef.UndefinedInternals.end();
+ I != IEnd; ++I) {
+ AddDeclRef(I->first, UndefinedInternals);
+ AddSourceLocation(I->second, UndefinedInternals);
+ }
+
// Write the control block
WriteControlBlock(PP, Context, isysroot, OutputFile);
@@ -3803,6 +3814,10 @@
// Write the known namespaces.
if (!KnownNamespaces.empty())
Stream.EmitRecord(KNOWN_NAMESPACES, KnownNamespaces);
+
+ // Write the undefined internal functions and variables.
+ if (!UndefinedInternals.empty())
+ Stream.EmitRecord(UNDEFINED_INTERNALS, UndefinedInternals);
// Write the visible updates to DeclContexts.
for (llvm::SmallPtrSet<const DeclContext *, 16>::iterator