diff options
| author | Douglas Gregor <dgregor@apple.com> | 2012-10-09 17:50:23 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2012-10-09 17:50:23 +0000 |
| commit | 7c0990ba35e743d58a5751f6019a6faab9478daa (patch) | |
| tree | 5edad69b2816e589197596b153c16104edb9f66a /clang | |
| parent | 62692ce7f3a4f5a69dc65bef888f4cc79c26a203 (diff) | |
| download | bcm5719-llvm-7c0990ba35e743d58a5751f6019a6faab9478daa.tar.gz bcm5719-llvm-7c0990ba35e743d58a5751f6019a6faab9478daa.zip | |
Make the order of visitation of the pending bodies in the AST reader
deterministic.
llvm-svn: 165515
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 8 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 5136113f792..5875a5052bb 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -33,6 +33,7 @@ #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" #include "llvm/ADT/APSInt.h" +#include "llvm/ADT/MapVector.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallSet.h" @@ -342,8 +343,13 @@ private: /// declarations that have not yet been linked to their definitions. llvm::SmallPtrSet<Decl *, 4> PendingDefinitions; + typedef llvm::MapVector<Decl *, uint64_t, + llvm::SmallDenseMap<Decl *, unsigned, 4>, + llvm::SmallVector<std::pair<Decl *, uint64_t>, 4> > + PendingBodiesMap; + /// \brief Functions or methods that have bodies that will be attached. - llvm::SmallDenseMap<Decl *, uint64_t, 4> PendingBodies; + PendingBodiesMap PendingBodies; /// \brief Read the records that describe the contents of declcontexts. bool ReadDeclContextStorage(ModuleFile &M, diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index b37f8c23631..b7266ebbba5 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -6484,8 +6484,8 @@ void ASTReader::finishPendingActions() { // Load the bodies of any functions or methods we've encountered. We do // this now (delayed) so that we can be sure that the declaration chains // have been fully wired up. - for (llvm::SmallDenseMap<Decl *, uint64_t, 4>::iterator - PB = PendingBodies.begin(), PBEnd = PendingBodies.end(); + for (PendingBodiesMap::iterator PB = PendingBodies.begin(), + PBEnd = PendingBodies.end(); PB != PBEnd; ++PB) { if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) { // FIXME: Check for =delete/=default? |

