blob: 1dd5c7e4af264b77fe4d37926b52d420def28bb1 [file] [edit]
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=%itanium_abi_triple -std=c++2c | FileCheck %s
namespace GH112003 {
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033fooILi0ETpTnDaJLi0ELi0EEEEDTsyT0_T_Ev
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033fooILi1ETpTnDaJLi0ELi0EEEEDTsyT0_T_Ev
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033fooILi0ETpTnDaJLl1EEEEDTsyT0_T_Ev
template <int I, auto...V>
decltype(V...[I]) foo() {return {};}
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033barILi0EJilEEEDyT0_T_v
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033barILi1EJilEEEDyT0_T_v
template <int I, typename...V>
V...[I] bar() {return {};}
template <int I, typename... T>
using First = T...[0];
// CHECK-LABEL: define {{.*}} @_ZN8GH1120033bazILi0EJiEEEvDy_SUBSTPACK_Li0E
// FIXME: handle indexing of partially substituted packs
template <int I, typename...V>
void baz(First<I, int, V...>){};
void fn() {
foo<0, 0, 0>();
foo<1, 0, 0>();
foo<0, 1L>();
bar<0, int, long>();
bar<1, int, long>();
baz<0, int>(0);
}
}