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