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 | |