xref: /llvm-project/clang/test/CodeGenCXX/mangle-local-classes-nested.cpp (revision e5df59ff78faebd897e81907606ce6074aac0df6)
1c9bd88e6SHans Wennborg // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s
218e4edaeSJohn McCall 
318e4edaeSJohn McCall // CHECK: @_ZTVZZ1HvEN1S1IEvE1S =
418e4edaeSJohn McCall 
518e4edaeSJohn McCall // CHECK: define {{.*}} @_Z2L1v(
618e4edaeSJohn McCall // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2Ev(
718e4edaeSJohn McCall // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2E_0v(
818e4edaeSJohn McCall // CHECK: define {{.*}} @_ZZ1FvEN1S1T1S1T1GEv(
918e4edaeSJohn McCall // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv(
1018e4edaeSJohn McCall // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v(
11*e5df59ffSRafael Espindola // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv(
12*e5df59ffSRafael Espindola // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v(
1318e4edaeSJohn McCall 
L1()1418e4edaeSJohn McCall void L1() {
1518e4edaeSJohn McCall   {
1618e4edaeSJohn McCall     struct S {
1718e4edaeSJohn McCall       void L2() {
1818e4edaeSJohn McCall         {
1918e4edaeSJohn McCall           struct S {
2018e4edaeSJohn McCall             void L3a() {}
2118e4edaeSJohn McCall           };
2218e4edaeSJohn McCall           S().L3a();
2318e4edaeSJohn McCall         }
2418e4edaeSJohn McCall         {
2518e4edaeSJohn McCall           struct S {
2618e4edaeSJohn McCall             void L3b() {}
2718e4edaeSJohn McCall           };
2818e4edaeSJohn McCall           S().L3b();
2918e4edaeSJohn McCall         }
3018e4edaeSJohn McCall       }
3118e4edaeSJohn McCall     };
3218e4edaeSJohn McCall     S().L2();
3318e4edaeSJohn McCall   }
3418e4edaeSJohn McCall   {
3518e4edaeSJohn McCall     struct S {
3618e4edaeSJohn McCall       void L2() {
3718e4edaeSJohn McCall         {
3818e4edaeSJohn McCall           struct S {
3918e4edaeSJohn McCall             void L3c() {}
4018e4edaeSJohn McCall           };
4118e4edaeSJohn McCall           S().L3c();
4218e4edaeSJohn McCall         }
4318e4edaeSJohn McCall         {
4418e4edaeSJohn McCall           struct S {
4518e4edaeSJohn McCall             void L3d() {}
4618e4edaeSJohn McCall           };
4718e4edaeSJohn McCall           S().L3d();
4818e4edaeSJohn McCall         }
4918e4edaeSJohn McCall       }
5018e4edaeSJohn McCall     };
5118e4edaeSJohn McCall     S().L2();
5218e4edaeSJohn McCall   }
5318e4edaeSJohn McCall }
5418e4edaeSJohn McCall 
F()5518e4edaeSJohn McCall void F() {
5618e4edaeSJohn McCall   struct S {
5718e4edaeSJohn McCall     struct T {
5818e4edaeSJohn McCall       struct S {
5918e4edaeSJohn McCall         struct T {
6018e4edaeSJohn McCall           void G() {}
6118e4edaeSJohn McCall         };
6218e4edaeSJohn McCall       };
6318e4edaeSJohn McCall     };
6418e4edaeSJohn McCall   };
6518e4edaeSJohn McCall   S::T::S::T().G();
6618e4edaeSJohn McCall }
6718e4edaeSJohn McCall 
6818e4edaeSJohn McCall struct B { virtual void Foo() = 0; };
6918e4edaeSJohn McCall void G(const B &);
7018e4edaeSJohn McCall 
H()7118e4edaeSJohn McCall void H() {
7218e4edaeSJohn McCall   struct S {
7318e4edaeSJohn McCall     void I() {
7418e4edaeSJohn McCall       struct S : B {
7518e4edaeSJohn McCall         virtual void Foo() {}
7618e4edaeSJohn McCall       };
7718e4edaeSJohn McCall       G(S());
7818e4edaeSJohn McCall     }
7918e4edaeSJohn McCall   };
8018e4edaeSJohn McCall   S().I();
8118e4edaeSJohn McCall }
82