diff options
| author | Faisal Vali <faisalv@yahoo.com> | 2013-12-04 03:51:14 +0000 |
|---|---|---|
| committer | Faisal Vali <faisalv@yahoo.com> | 2013-12-04 03:51:14 +0000 |
| commit | cb7e5df97efa0d5cbe6e51902cd619bec1516f16 (patch) | |
| tree | cd7e19f87665338b5a63528d117a2c29a0817786 /clang/lib | |
| parent | 0acd8a756133c48b9342444a5d32cac3fbcc9911 (diff) | |
| download | bcm5719-llvm-cb7e5df97efa0d5cbe6e51902cd619bec1516f16.tar.gz bcm5719-llvm-cb7e5df97efa0d5cbe6e51902cd619bec1516f16.zip | |
Fix PR17637: incorrect calculation of template parameter depth
In delayed template parsing mode, adjust the template depth counter for each template parameter list associated with an out of line member template specialization.
llvm-svn: 196351
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Parse/ParseTemplate.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 076edb93fa1..8275922a6e3 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -1304,9 +1304,11 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) { new ParseScope(this, Scope::TemplateParamScope)); DeclaratorDecl *Declarator = dyn_cast<DeclaratorDecl>(FunD); - if (Declarator && Declarator->getNumTemplateParameterLists() != 0) { + const unsigned DeclaratorNumTemplateParameterLists = + (Declarator ? Declarator->getNumTemplateParameterLists() : 0); + if (Declarator && DeclaratorNumTemplateParameterLists != 0) { Actions.ActOnReenterDeclaratorTemplateScope(getCurScope(), Declarator); - ++CurTemplateDepthTracker; + CurTemplateDepthTracker.addDepth(DeclaratorNumTemplateParameterLists); } Actions.ActOnReenterTemplateScope(getCurScope(), LPT.D); ++CurTemplateDepthTracker; |

