1// RUN: %clang_cc1 %s -emit-llvm -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 {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv(
10// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v(
11// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv(
12// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v(
13
14void 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
55void 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
68struct B { virtual void Foo() = 0; };
69void G(const B &);
70
71void 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