diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-01-06 22:05:37 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-01-06 22:05:37 +0000 |
commit | 5407920f82618114a66e92bf5dad280f42a4075c (patch) | |
tree | 2b2f9b5a738d6c78f9f8730452f72996bd0eedc8 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 9a5b242d3ca460a755599f867eb1d8903e8ee782 (diff) | |
download | bcm5719-llvm-5407920f82618114a66e92bf5dad280f42a4075c.tar.gz bcm5719-llvm-5407920f82618114a66e92bf5dad280f42a4075c.zip |
During name lookup, use redecl_iterator to walk over the redeclaration
chain to determine whether any declaration of the given entity is
visible, eliminating the redundant (and less efficient)
getPreviousDeclaration() implementation.
This tweak uncovered an omission in the handling of
RedeclarableTemplateDecl, where we weren't making sure to search for
additional redeclarations of a template in other module files. Things
would be cleaner if RedeclarableTemplateDecl actually used Redeclarable.
llvm-svn: 147687
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 51a275ad070..24ac976c108 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -255,7 +255,7 @@ namespace clang { void VisitParmVarDecl(ParmVarDecl *PD); void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D); void VisitTemplateDecl(TemplateDecl *D); - void VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D); + RedeclarableResult VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D); void VisitClassTemplateDecl(ClassTemplateDecl *D); void VisitFunctionTemplateDecl(FunctionTemplateDecl *D); void VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D); @@ -1219,7 +1219,8 @@ void ASTDeclReader::VisitTemplateDecl(TemplateDecl *D) { D->init(TemplatedDecl, TemplateParams); } -void ASTDeclReader::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) { +ASTDeclReader::RedeclarableResult +ASTDeclReader::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) { // Initialize CommonOrPrev before VisitTemplateDecl so that getCommonPtr() // can be used while this is still initializing. enum RedeclKind { FirstDeclaration, FirstInFile, PointsToPrevious }; @@ -1278,6 +1279,8 @@ void ASTDeclReader::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) { VisitTemplateDecl(D); D->IdentifierNamespace = Record[Idx++]; + + return RedeclarableResult(Reader, FirstDeclID); } void ASTDeclReader::VisitClassTemplateDecl(ClassTemplateDecl *D) { |