diff options
author | Manman Ren <manman.ren@gmail.com> | 2016-02-24 23:05:43 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2016-02-24 23:05:43 +0000 |
commit | c445d387769d05753f678f6fb88403e2e1b18710 (patch) | |
tree | a2cf407c24229324b4b455e042729ef1eaaefd86 /clang/test/SemaTemplate/default-arguments-cxx0x.cpp | |
parent | 1c576054cbfb9dfcacd2ee9d209792ccc95327cc (diff) | |
download | bcm5719-llvm-c445d387769d05753f678f6fb88403e2e1b18710.tar.gz bcm5719-llvm-c445d387769d05753f678f6fb88403e2e1b18710.zip |
Fix assertion failure on MaybeODRUseExprs.
In VisitNonTypeTemplateParamDecl, before SubstExpr with the default argument,
we should create a ConstantEvaluated ExpressionEvaluationContext. Without this,
it is possible to use a PotentiallyEvaluated ExpressionEvaluationContext; and
MaybeODRUseExprs will not be cleared when popping the context, causing
assertion failure.
This is similar to how we handle the context before SubstExpr with the
default argument, in SubstDefaultTemplateArgument.
Part of PR13986.
rdar://24480205
Differential Revision: http://reviews.llvm.org/D17576
llvm-svn: 261803
Diffstat (limited to 'clang/test/SemaTemplate/default-arguments-cxx0x.cpp')
-rw-r--r-- | clang/test/SemaTemplate/default-arguments-cxx0x.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/default-arguments-cxx0x.cpp b/clang/test/SemaTemplate/default-arguments-cxx0x.cpp index 0c97c2056b7..c52899a8e6d 100644 --- a/clang/test/SemaTemplate/default-arguments-cxx0x.cpp +++ b/clang/test/SemaTemplate/default-arguments-cxx0x.cpp @@ -75,3 +75,13 @@ namespace rdar23810407 { g<int>(); } } + +// rdar://problem/24480205 +namespace PR13986 { + constexpr unsigned Dynamic = 0; + template <unsigned> class A { template <unsigned = Dynamic> void m_fn1(); }; + class Test { + ~Test() {} + A<1> m_target; + }; +} |