]> granicus.if.org Git - clang/commit
Improve name lookup for and template instantiation of declaration
authorDouglas Gregor <dgregor@apple.com>
Wed, 27 May 2009 17:07:49 +0000 (17:07 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 27 May 2009 17:07:49 +0000 (17:07 +0000)
commit2bba76b0ec4c2f2134eebb1a2bbfe102f36c2f6e
tree611cf27603b2bde8b1b67ddd443eee3fffbd79c0
parente70e8f7fef3efb3d526ee25b3a0e2a4bf67a04b6
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
lib/Parse/ParseDeclCXX.cpp
lib/Sema/SemaLookup.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/SemaTemplateInstantiateExpr.cpp
test/SemaTemplate/example-dynarray.cpp
test/SemaTemplate/instantiate-declref.cpp [new file with mode: 0644]