diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-21 04:10:40 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-21 04:10:40 +0000 |
commit | 57721ac5916c52a13d518bdb24aa479417c5beb3 (patch) | |
tree | 9027b6aef220efc69351d8128ce073e0758b602c /clang/lib/Serialization/ASTReader.cpp | |
parent | ae1ec299df110b938168150158f6f618e5c86491 (diff) | |
download | bcm5719-llvm-57721ac5916c52a13d518bdb24aa479417c5beb3.tar.gz bcm5719-llvm-57721ac5916c52a13d518bdb24aa479417c5beb3.zip |
[modules] Fix some of the confusion when computing the override set for a macro
introduced by finalization. This is still not entirely correct; more fixes to
follow.
llvm-svn: 213498
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 419f6b32008..e3a16c3c5f2 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3323,8 +3323,7 @@ static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) { void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner, bool FromFinalization) { // FIXME: Only do this if Owner->NameVisibility == AllVisible. - for (unsigned I = 0, N = Names.HiddenDecls.size(); I != N; ++I) { - Decl *D = Names.HiddenDecls[I]; + for (Decl *D : Names.HiddenDecls) { bool wasHidden = D->Hidden; D->Hidden = false; @@ -3337,10 +3336,8 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner, assert((FromFinalization || Owner->NameVisibility >= Module::MacrosVisible) && "nothing to make visible?"); - for (HiddenMacrosMap::const_iterator I = Names.HiddenMacros.begin(), - E = Names.HiddenMacros.end(); - I != E; ++I) - installImportedMacro(I->first, I->second, Owner, FromFinalization); + for (const auto &Macro : Names.HiddenMacros) + installImportedMacro(Macro.first, Macro.second, Owner, FromFinalization); } void ASTReader::makeModuleVisible(Module *Mod, @@ -3374,9 +3371,12 @@ void ASTReader::makeModuleVisible(Module *Mod, // mark them as visible. HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod); if (Hidden != HiddenNamesMap.end()) { - makeNamesVisible(Hidden->second, Hidden->first, - /*FromFinalization*/false); + auto HiddenNames = std::move(*Hidden); HiddenNamesMap.erase(Hidden); + makeNamesVisible(HiddenNames.second, HiddenNames.first, + /*FromFinalization*/false); + assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() && + "making names visible added hidden names"); } // Push any exported modules onto the stack to be marked as visible. @@ -3899,12 +3899,12 @@ void ASTReader::InitializeContext() { } void ASTReader::finalizeForWriting() { - for (HiddenNamesMapType::iterator Hidden = HiddenNamesMap.begin(), - HiddenEnd = HiddenNamesMap.end(); - Hidden != HiddenEnd; ++Hidden) { - makeNamesVisible(Hidden->second, Hidden->first, /*FromFinalization*/true); + while (!HiddenNamesMap.empty()) { + auto HiddenNames = std::move(*HiddenNamesMap.begin()); + HiddenNamesMap.erase(HiddenNamesMap.begin()); + makeNamesVisible(HiddenNames.second, HiddenNames.first, + /*FromFinalization*/true); } - HiddenNamesMap.clear(); } /// \brief Given a cursor at the start of an AST file, scan ahead and drop the |