aboutsummaryrefslogtreecommitdiff
path: root/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Serialization/ASTReader.cpp')
-rw-r--r--lib/Serialization/ASTReader.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 258baebc05..a083e24e9e 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -2439,6 +2439,11 @@ ASTReader::ASTReadResult ASTReader::validateFileEntries(ModuleFile &M) {
return Success;
}
+void ASTReader::makeNamesVisible(const HiddenNames &Names) {
+ for (unsigned I = 0, N = Names.size(); I != N; ++I)
+ Names[I]->ModulePrivate = false;
+}
+
void ASTReader::makeModuleVisible(Module *Mod,
Module::NameVisibilityKind NameVisibility) {
llvm::SmallPtrSet<Module *, 4> Visited;
@@ -2457,8 +2462,13 @@ void ASTReader::makeModuleVisible(Module *Mod,
// Update the module's name visibility.
Mod->NameVisibility = NameVisibility;
- // FIXME: If we've already deserialized any names from this module,
+ // If we've already deserialized any names from this module,
// mark them as visible.
+ HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
+ if (Hidden != HiddenNamesMap.end()) {
+ makeNamesVisible(Hidden->second);
+ HiddenNamesMap.erase(Hidden);
+ }
// Push any non-explicit submodules onto the stack to be marked as
// visible.
@@ -2776,6 +2786,15 @@ void ASTReader::InitializeContext() {
}
}
+void ASTReader::finalizeForWriting() {
+ for (HiddenNamesMapType::iterator Hidden = HiddenNamesMap.begin(),
+ HiddenEnd = HiddenNamesMap.end();
+ Hidden != HiddenEnd; ++Hidden) {
+ makeNamesVisible(Hidden->second);
+ }
+ HiddenNamesMap.clear();
+}
+
/// \brief Retrieve the name of the original source file name
/// directly from the AST file, without actually loading the AST
/// file.