xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGenCXX/mangle-local-classes-nested.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s
2f4a2713aSLionel Sambuc 
3f4a2713aSLionel Sambuc // CHECK: @_ZTVZZ1HvEN1S1IEvE1S =
4f4a2713aSLionel Sambuc 
5f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_Z2L1v(
6f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2Ev(
7f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2E_0v(
8f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZ1FvEN1S1T1S1T1GEv(
9f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv(
10f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v(
11f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv(
12f4a2713aSLionel Sambuc // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v(
13f4a2713aSLionel Sambuc 
L1()14f4a2713aSLionel Sambuc void L1() {
15f4a2713aSLionel Sambuc   {
16f4a2713aSLionel Sambuc     struct S {
17f4a2713aSLionel Sambuc       void L2() {
18f4a2713aSLionel Sambuc         {
19f4a2713aSLionel Sambuc           struct S {
20f4a2713aSLionel Sambuc             void L3a() {}
21f4a2713aSLionel Sambuc           };
22f4a2713aSLionel Sambuc           S().L3a();
23f4a2713aSLionel Sambuc         }
24f4a2713aSLionel Sambuc         {
25f4a2713aSLionel Sambuc           struct S {
26f4a2713aSLionel Sambuc             void L3b() {}
27f4a2713aSLionel Sambuc           };
28f4a2713aSLionel Sambuc           S().L3b();
29f4a2713aSLionel Sambuc         }
30f4a2713aSLionel Sambuc       }
31f4a2713aSLionel Sambuc     };
32f4a2713aSLionel Sambuc     S().L2();
33f4a2713aSLionel Sambuc   }
34f4a2713aSLionel Sambuc   {
35f4a2713aSLionel Sambuc     struct S {
36f4a2713aSLionel Sambuc       void L2() {
37f4a2713aSLionel Sambuc         {
38f4a2713aSLionel Sambuc           struct S {
39f4a2713aSLionel Sambuc             void L3c() {}
40f4a2713aSLionel Sambuc           };
41f4a2713aSLionel Sambuc           S().L3c();
42f4a2713aSLionel Sambuc         }
43f4a2713aSLionel Sambuc         {
44f4a2713aSLionel Sambuc           struct S {
45f4a2713aSLionel Sambuc             void L3d() {}
46f4a2713aSLionel Sambuc           };
47f4a2713aSLionel Sambuc           S().L3d();
48f4a2713aSLionel Sambuc         }
49f4a2713aSLionel Sambuc       }
50f4a2713aSLionel Sambuc     };
51f4a2713aSLionel Sambuc     S().L2();
52f4a2713aSLionel Sambuc   }
53f4a2713aSLionel Sambuc }
54f4a2713aSLionel Sambuc 
F()55f4a2713aSLionel Sambuc void F() {
56f4a2713aSLionel Sambuc   struct S {
57f4a2713aSLionel Sambuc     struct T {
58f4a2713aSLionel Sambuc       struct S {
59f4a2713aSLionel Sambuc         struct T {
60f4a2713aSLionel Sambuc           void G() {}
61f4a2713aSLionel Sambuc         };
62f4a2713aSLionel Sambuc       };
63f4a2713aSLionel Sambuc     };
64f4a2713aSLionel Sambuc   };
65f4a2713aSLionel Sambuc   S::T::S::T().G();
66f4a2713aSLionel Sambuc }
67f4a2713aSLionel Sambuc 
68f4a2713aSLionel Sambuc struct B { virtual void Foo() = 0; };
69f4a2713aSLionel Sambuc void G(const B &);
70f4a2713aSLionel Sambuc 
H()71f4a2713aSLionel Sambuc void H() {
72f4a2713aSLionel Sambuc   struct S {
73f4a2713aSLionel Sambuc     void I() {
74f4a2713aSLionel Sambuc       struct S : B {
75f4a2713aSLionel Sambuc         virtual void Foo() {}
76f4a2713aSLionel Sambuc       };
77f4a2713aSLionel Sambuc       G(S());
78f4a2713aSLionel Sambuc     }
79f4a2713aSLionel Sambuc   };
80f4a2713aSLionel Sambuc   S().I();
81f4a2713aSLionel Sambuc }
82