| // Verify that class literals are mangled the same way regardless |
| // of the underlying type. |
| // { dg-do compile { target c++2a } } |
| |
| struct I { int a[5], b[5], c[5]; }; |
| template <I> struct X { }; |
| |
| typedef X<I{ {1,2}, {}, {11,12,13,14} }> Ti; |
| void f (Ti) { } |
| // { dg-final { scan-assembler "_Z1f1XIXtl1ItlA5_iLi1ELi2EEtlS1_EtlS1_Li11ELi12ELi13ELi14EEEEE" } } |
| |
| struct C { char a[5], b[5], c[5]; }; |
| template <C> struct Y { }; |
| |
| typedef Y<C{ {1,2}, {}, {11,12,13,14} }> Tca; |
| void g (Tca) { } |
| // { dg-final { scan-assembler "_Z1g1YIXtl1CtlA5_cLc1ELc2EEtlS1_EtlS1_Lc11ELc12ELc13ELc14EEEEE" } } |
| |
| typedef Y<C{ "\1\2", "", {11,12,13,14} }> Tcs; |
| void h (Tcs) { } |
| // { dg-final { scan-assembler "_Z1h1YIXtl1CtlA5_cLc1ELc2EEtlS1_EtlS1_Lc11ELc12ELc13ELc14EEEEE" } } |
| |
| struct S { signed char a[5], b[5], c[5]; }; |
| template <S> struct Z { }; |
| |
| typedef Z<S{ {1,2}, {}, {11,12,13,14} }> Tsc; |
| |
| void i (Tsc) { } |
| // { dg-final { scan-assembler "_Z1i1ZIXtl1StlA5_aLa1ELa2EEtlS1_EtlS1_La11ELa12ELa13ELa14EEEEE" } } |