diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-07-15 21:46:17 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-07-15 21:46:17 +0000 |
commit | ba6ffaf21e465c0926d7fc5fa294ea52f8d45faf (patch) | |
tree | 53890f852d30d567969cd756066860f4bd095d1a /lib/AST/Decl.cpp | |
parent | cea2e3d7ea9cdc763f7a98937c09769cd4d1f582 (diff) |
Augment the interface of ExternalASTSource::FindExternalLexicalDecls()
to allow clients to specify that they've already (correctly) loaded
declarations, and that no further action is needed.
Also, make sure that we clear the "has external lexical declarations"
bit before calling FindExternalLexicalDecls(), to avoid infinite
recursion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135306 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Decl.cpp')
-rw-r--r-- | lib/AST/Decl.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 9b507cfc5e..4c323da7ee 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -2361,8 +2361,15 @@ void RecordDecl::LoadFieldsFromExternalStorage() const { ExternalASTSource::Deserializing TheFields(Source); llvm::SmallVector<Decl*, 64> Decls; - if (Source->FindExternalLexicalDeclsBy<FieldDecl>(this, Decls)) + LoadedFieldsFromExternalStorage = true; + switch (Source->FindExternalLexicalDeclsBy<FieldDecl>(this, Decls)) { + case ELR_Success: + break; + + case ELR_AlreadyLoaded: + case ELR_Failure: return; + } #ifndef NDEBUG // Check that all decls we got were FieldDecls. @@ -2370,8 +2377,6 @@ void RecordDecl::LoadFieldsFromExternalStorage() const { assert(isa<FieldDecl>(Decls[i])); #endif - LoadedFieldsFromExternalStorage = true; - if (Decls.empty()) return; |