1 // RUN: %clang_cc1 -std=c++1z -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s
3 template<int> struct A
{};
4 template<int ...N
> void foldr(A
<(N
+ ...)>);
5 template<int ...N
> void foldl(A
<(... + N
)>);
6 template<int ...N
> void foldr1(A
<(N
+ ... + 1)>);
7 template<int ...N
> void foldl1(A
<(1 + ... + N
)>);
13 // CHECK-DAG: @_Z5foldrIJLi1ELi2ELi3EEEv1AIXfrplT_EE(
14 // CHECK-DAG: @_Z5foldlIJLi1ELi2ELi3EEEv1AIXflplT_EE(
15 // CHECK-DAG: @_Z6foldr1IJLi1ELi2ELi3EEEv1AIXfRplT_Li1EEE(
16 // CHECK-DAG: @_Z6foldl1IJLi1ELi2ELi3EEEv1AIXfLplLi1ET_EE(
19 template<int ...N
> using Foldr
= A
<(N
+ ...)>;
20 template<int ...N
> using Foldl
= A
<(... + N
)>;
21 template<int ...N
> using Foldr1
= A
<(N
+ ... + 1)>;
22 template<int ...N
> using Foldl1
= A
<(1 + ... + N
)>;
24 template<int ...A
> struct Partial
{
25 template<int ...B
> void foldr(Foldr
<A
..., B
..., A
..., B
...>);
26 template<int ...B
> void foldl(Foldl
<A
..., B
..., A
..., B
...>);
27 template<int ...B
> void foldr1(Foldr1
<A
..., B
..., A
..., B
...>);
28 template<int ...B
> void foldl1(Foldl1
<A
..., B
..., A
..., B
...>);
30 void use(Partial
<1, 2> p
) {
35 // CHECK-DAG: @_ZN7PartialIJLi1ELi2EEE5foldrIJLi3ELi4EEEEv1AIXplLi1EplLi2EfRplT_plLi1EplLi2EfrplT_EE(
36 // CHECK-DAG: @_ZN7PartialIJLi1ELi2EEE5foldlIJLi3ELi4EEEEv1AIXfLplplplfLplplLi1ELi2ET_Li1ELi2ET_EE
37 // CHECK-DAG: @_ZN7PartialIJLi1ELi2EEE6foldr1IJLi3ELi4EEEEv1AIXplLi1EplLi2EfRplT_plLi1EplLi2EfRplT_Li1EEE(
38 // CHECK-DAG: @_ZN7PartialIJLi1ELi2EEE6foldl1IJLi3ELi4EEEEv1AIXfLplplplfLplplplLi1ELi1ELi2ET_Li1ELi2ET_EE(
42 template<int ...N
> void f() {