summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplate.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2019-08-24 02:30:00 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2019-08-24 02:30:00 +0000
commitcb167c85b468b1f3876d1b3545713703fd61faa0 (patch)
treee06c9c9ce84c63f6273f01a8c20984b180fb1523 /clang/lib/Sema/SemaTemplate.cpp
parent3f6dd0c588726b2303986c4a669451ae61b34c1e (diff)
downloadbcm5719-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.cpp1
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);
OpenPOWER on IntegriCloud