| // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s |
| |
| // CHECK: @_ZTVZZ1HvEN1S1IEvE1S = |
| |
| // CHECK: define {{.*}} @_Z2L1v( |
| // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2Ev( |
| // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2E_0v( |
| // CHECK: define {{.*}} @_ZZ1FvEN1S1T1S1T1GEv( |
| // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv( |
| // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v( |
| // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv( |
| // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v( |
| |
| void L1() { |
| { |
| struct S { |
| void L2() { |
| { |
| struct S { |
| void L3a() {} |
| }; |
| S().L3a(); |
| } |
| { |
| struct S { |
| void L3b() {} |
| }; |
| S().L3b(); |
| } |
| } |
| }; |
| S().L2(); |
| } |
| { |
| struct S { |
| void L2() { |
| { |
| struct S { |
| void L3c() {} |
| }; |
| S().L3c(); |
| } |
| { |
| struct S { |
| void L3d() {} |
| }; |
| S().L3d(); |
| } |
| } |
| }; |
| S().L2(); |
| } |
| } |
| |
| void F() { |
| struct S { |
| struct T { |
| struct S { |
| struct T { |
| void G() {} |
| }; |
| }; |
| }; |
| }; |
| S::T::S::T().G(); |
| } |
| |
| struct B { virtual void Foo() = 0; }; |
| void G(const B &); |
| |
| void H() { |
| struct S { |
| void I() { |
| struct S : B { |
| virtual void Foo() {} |
| }; |
| G(S()); |
| } |
| }; |
| S().I(); |
| } |