aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGenCXX/template-cxx20.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGenCXX/template-cxx20.cpp')
-rw-r--r--clang/test/CodeGenCXX/template-cxx20.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/template-cxx20.cpp b/clang/test/CodeGenCXX/template-cxx20.cpp
new file mode 100644
index 0000000..aeb1cc9
--- /dev/null
+++ b/clang/test/CodeGenCXX/template-cxx20.cpp
@@ -0,0 +1,24 @@
+// 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
+}