diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-05-27 17:07:49 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-05-27 17:07:49 +0000 |
commit | 2bba76b0ec4c2f2134eebb1a2bbfe102f36c2f6e (patch) | |
tree | 611cf27603b2bde8b1b67ddd443eee3fffbd79c0 /lib/Sema/SemaLookup.cpp | |
parent | e70e8f7fef3efb3d526ee25b3a0e2a4bf67a04b6 (diff) |
Improve name lookup for and template instantiation of declaration
references. There are several smallish fixes here:
- Make sure we look through template parameter scope when
determining whether we're parsing a nested class (or nested class
*template*). This makes sure that we delay parsing the bodies of
inline member functions until after we're out of the outermost
class (template) scope.
- Since the bodies of member functions are always parsed
"out-of-line", even when they were declared in-line, teach
unqualified name lookup to look into the (semantic) parents.
- Use the new InstantiateDeclRef to handle the instantiation of a
reference to a declaration (in DeclRefExpr), which drastically
simplifies template instantiation for DeclRefExprs.
- When we're instantiating a ParmVarDecl, it must be in the current
instantiation scope, so only look there.
Also, remove the #if 0's and FIXME's from the dynarray example, which
now compiles and executes thanks to Anders and Eli.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72481 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
-rw-r--r-- | lib/Sema/SemaLookup.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index 8fe287cb41..6212449744 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -687,7 +687,8 @@ Sema::CppLookupName(Scope *S, DeclarationName Name, if (R || RedeclarationOnly) return std::make_pair(true, R); } - if (Ctx->getParent() != Ctx->getLexicalParent()) { + if (Ctx->getParent() != Ctx->getLexicalParent() + || isa<CXXMethodDecl>(Ctx)) { // It is out of line defined C++ method or struct, we continue // doing name lookup in parent context. Once we will find namespace // or translation-unit we save it for possible checking |