llvm-project/clang/test/CodeGenCXX/template-cxx20.cpp
Matheus Izvekov 018ae02785
[clang] fix transform for constant template parameter type subst node (#162587)
This fixes the transform to use the correct parameter type for an
AssociatedDecl which has been fully specialized.

Instead of using the type for the parameter of the specialized template,
this uses the type of the argument it has been specialized with.

This fixes a regression reported here:
https://github.com/llvm/llvm-project/pull/161029#issuecomment-3375478990

Since this regression was never released, there are no release notes.
2025-10-09 03:35:49 +00:00

25 lines
779 B
C++

// RUN: %clang_cc1 %s -O0 -disable-llvm-passes -triple=x86_64 -std=c++20 -emit-llvm -o - | FileCheck %s
namespace GH161029_regression1 {
template <class _Fp> auto f(int) { _Fp{}(0); }
template <class _Fp, int... _Js> void g() {
(..., f<_Fp>(_Js));
}
enum E { k };
template <int, E> struct ElementAt;
template <E First> struct ElementAt<0, First> {
static int value;
};
template <typename T, T Item> struct TagSet {
template <int Index> using Tag = ElementAt<Index, Item>;
};
template <typename TagSet> struct S {
void U() { (void)TagSet::template Tag<0>::value; }
};
S<TagSet<E, k>> s;
void h() {
g<decltype([](auto) -> void { s.U(); }), 0>();
}
// CHECK: call void @_ZN20GH161029_regression11SINS_6TagSetINS_1EELS2_0EEEE1UEv
}