1 // Verify mangling of class literals of types with ctors.
2 // { dg-do compile { target c++2a } }
3 
4 struct A
5 {
6   char i;
AA7   constexpr A (): i (1) { }
AA8   constexpr A (int i): i (i) { }
9 };
10 
11 struct B { A a[3]; };
12 
13 template <B> struct X { };
14 
f___(X<B{{ }}>)15 void f___ (X<B{{ }}>) { }
16 // { dg-final { scan-assembler "_Z4f0001XIXtl1BEEE" } }
17 
f0__(X<B{{ 0 }}>)18 void f0__ (X<B{{ 0 }}>) { }
19 // { dg-final { scan-assembler "_Z4f0__1XIXtl1BtlA3_1AtlS1_EtlS1_Lc1EEtlS1_Lc1EEEEEE" } }
20 
f00_(X<B{{ 0, 0 }}>)21 void f00_ (X<B{{ 0, 0 }}>) { }
22 // { dg-final { scan-assembler "_Z4f00_1XIXtl1BtlA3_1AtlS1_EtlS1_EtlS1_Lc1EEEEEE" } }
23 
f000(X<B{{ 0, 0, 0 }}>)24 void f000 (X<B{{ 0, 0, 0 }}>) { }
25 // { dg-final { scan-assembler "_Z4f0001XIXtl1BEEE" } }
26 
f1__(X<B{{ 1 }}>)27 void f1__ (X<B{{ 1 }}>) { }
28 // { dg-final { scan-assembler "_Z4f1__1XIXtl1BtlA3_1AtlS1_Lc1EEtlS1_Lc1EEtlS1_Lc1EEEEEE" } }
29