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
L1()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
F()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
H()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