| // Test mangling of type casts |
| // { dg-do compile } |
| |
| class A {}; |
| class B : public A {}; |
| |
| template<const A* a> class C {}; |
| template<const B* b> class D {}; |
| template<B* b> class E {}; |
| |
| template<const B* b> void f(D<b> &, C<static_cast<const A*>(b)> &) {} |
| template<const B* b> void g(D<b> &, E<const_cast<B*>(b)> &) {} |
| |
| B b; |
| |
| int main() |
| { |
| C<static_cast<const A*>(&b)> c; |
| D<&b> d; |
| E<const_cast<B*>(&b)> e; |
| f(d, c); |
| g(d, e); |
| } |
| |
| // { dg-final { scan-assembler "\n_?_Z1fIXadL_Z1bEEEvR1DIXT_EER1CIXcvPK1AT_EE\[: \t\n\]" } } |
| // { dg-final { scan-assembler "\n_?_Z1gIXadL_Z1bEEEvR1DIXT_EER1EIXcvP1BT_EE\[: \t\n\]" } } |