diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-04-25 18:39:17 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-04-25 18:39:17 +0000 |
| commit | 6fe744cc389f3aa5c75221ae4d06dc5594e04777 (patch) | |
| tree | c57d87703b02c27df6713e77ef186ebd83638517 /clang/lib/Sema | |
| parent | 1ad04d95bccb9cc80bcdfd148b29efb59c6d38d7 (diff) | |
| download | bcm5719-llvm-6fe744cc389f3aa5c75221ae4d06dc5594e04777.tar.gz bcm5719-llvm-6fe744cc389f3aa5c75221ae4d06dc5594e04777.zip | |
When resolving default template arguments, it should be done in the declaration context
of the template what we are going to instantiate.
Fixes various crashes of rdar://11242625 & http://llvm.org/PR11421.
llvm-svn: 155576
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index d4b09753d30..b9ea055a4c5 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -2512,6 +2512,7 @@ SubstDefaultTemplateArgument(Sema &SemaRef, Converted.size(), SourceRange(TemplateLoc, RAngleLoc)); + Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext()); ArgType = SemaRef.SubstType(ArgType, AllTemplateArgs, Param->getDefaultArgumentLoc(), Param->getDeclName()); @@ -2560,6 +2561,7 @@ SubstDefaultTemplateArgument(Sema &SemaRef, Converted.size(), SourceRange(TemplateLoc, RAngleLoc)); + Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext()); return SemaRef.SubstExpr(Param->getDefaultArgument(), AllTemplateArgs); } @@ -2607,6 +2609,7 @@ SubstDefaultTemplateArgument(Sema &SemaRef, Converted.size(), SourceRange(TemplateLoc, RAngleLoc)); + Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext()); // Substitute into the nested-name-specifier first, QualifierLoc = Param->getDefaultArgument().getTemplateQualifierLoc(); if (QualifierLoc) { |

