diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-20 19:49:13 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-20 19:49:13 +0000 |
| commit | 07ed9cfc3e8db2d6acf2412bc138d61e88ccc5f5 (patch) | |
| tree | 4c38e7c51bc560d6994f559fb0a15cd08130f26d /llvm/lib/CodeGen/MachineCombiner.cpp | |
| parent | 97dc622ab3f77d877ee302908dec20d9dbddfe2b (diff) | |
| download | bcm5719-llvm-07ed9cfc3e8db2d6acf2412bc138d61e88ccc5f5.tar.gz bcm5719-llvm-07ed9cfc3e8db2d6acf2412bc138d61e88ccc5f5.zip | |
Fix crash and rejects-valid when a later template parameter or default
template argument contains a backreference to a dependently-typed
earlier parameter.
In a case like:
template<typename T, T A, decltype(A) = A> struct X {};
template<typename U> auto Y = X<U, 0>();
we previously treated both references to `A` in the third parameter as
being of type `int` when checking the template-id in `Y`. That`s wrong;
the type of `A` in these contexts is the dependent type `U`.
When we encounter a non-type template argument that we can't convert to
the parameter type because of type-dependence, we now insert a dependent
conversion node so that the SubstNonTypeTemplateParmExpr for the
template argument will have the parameter's type rather than whatever
type the argument had.
llvm-svn: 363972
Diffstat (limited to 'llvm/lib/CodeGen/MachineCombiner.cpp')
0 files changed, 0 insertions, 0 deletions

