// 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(); }