diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-08-24 02:30:00 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-08-24 02:30:00 +0000 |
commit | cb167c85b468b1f3876d1b3545713703fd61faa0 (patch) | |
tree | e06c9c9ce84c63f6273f01a8c20984b180fb1523 /clang/lib/Sema/SemaTemplate.cpp | |
parent | 3f6dd0c588726b2303986c4a669451ae61b34c1e (diff) | |
download | bcm5719-llvm-cb167c85b468b1f3876d1b3545713703fd61faa0.tar.gz bcm5719-llvm-cb167c85b468b1f3876d1b3545713703fd61faa0.zip |
PR42513: Enter the proper DeclContext before substituting into an
default template argument expression.
We already did this for type template parameters and template template
parameters, but apparently forgot to do so for non-type template
parameters. This causes the substituted default argument expression to
be substituted in the proper context, and in particular to properly mark
its subexpressions as odr-used.
llvm-svn: 369834
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index a73c5d3f9bc..d230ec90d77 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -4693,6 +4693,7 @@ SubstDefaultTemplateArgument(Sema &SemaRef, for (unsigned i = 0, e = Param->getDepth(); i != e; ++i) TemplateArgLists.addOuterTemplateArguments(None); + Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext()); EnterExpressionEvaluationContext ConstantEvaluated( SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated); return SemaRef.SubstExpr(Param->getDefaultArgument(), TemplateArgLists); |