diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-08-28 21:09:48 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-08-28 21:09:48 +0000 |
| commit | d99bb43068b1c5f8db44f1a114e72bbc2e71ae54 (patch) | |
| tree | 751fe0e98553e9ed59b2dbf3197f0004612b758b /clang/lib | |
| parent | 39cacdb04b29099084cb7760cc3e823f551ecbaf (diff) | |
| download | bcm5719-llvm-d99bb43068b1c5f8db44f1a114e72bbc2e71ae54.tar.gz bcm5719-llvm-d99bb43068b1c5f8db44f1a114e72bbc2e71ae54.zip | |
Fix and test template instantiation for nested member templates.
llvm-svn: 80394
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 213855741cb..732394d867d 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -947,9 +947,12 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, // Find the function body that we'll be substituting. const FunctionDecl *PatternDecl = 0; - if (FunctionTemplateDecl *Primary = Function->getPrimaryTemplate()) + if (FunctionTemplateDecl *Primary = Function->getPrimaryTemplate()) { + while (Primary->getInstantiatedFromMemberTemplate()) + Primary = Primary->getInstantiatedFromMemberTemplate(); + PatternDecl = Primary->getTemplatedDecl(); - else + } else PatternDecl = Function->getInstantiatedFromMemberFunction(); Stmt *Pattern = 0; if (PatternDecl) |

