mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 19:56:05 +00:00

Explicit specialization doesn't increase depth of template parameters, so need to be careful when gathering template parameters for instantiation. For the case: ``` template<typename T> struct X { struct impl; }; template <> struct X<int>::impl { template<int ct> int f() { return ct; }; }; ``` instantiation of `f` used to crash because type template parameter `int` of explicit specialization was taken into account, but non-type template parameter `ct` had zero depth and index so wrong parameter ended up inside of a wrong handler. Fixes https://github.com/llvm/llvm-project/issues/61159 Reviewed By: aaron.ballman, shafik Differential Revision: https://reviews.llvm.org/D155705