1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // CHECK: @_ZTVZZ1HvEN1S1IEvE1S = 4*67e74705SXin Li 5*67e74705SXin Li // CHECK: define {{.*}} @_Z2L1v( 6*67e74705SXin Li // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2Ev( 7*67e74705SXin Li // CHECK: define {{.*}} @_ZZ2L1vEN1S2L2E_0v( 8*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1FvEN1S1T1S1T1GEv( 9*67e74705SXin Li // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv( 10*67e74705SXin Li // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v( 11*67e74705SXin Li // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv( 12*67e74705SXin Li // CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v( 13*67e74705SXin Li L1()14*67e74705SXin Livoid L1() { 15*67e74705SXin Li { 16*67e74705SXin Li struct S { 17*67e74705SXin Li void L2() { 18*67e74705SXin Li { 19*67e74705SXin Li struct S { 20*67e74705SXin Li void L3a() {} 21*67e74705SXin Li }; 22*67e74705SXin Li S().L3a(); 23*67e74705SXin Li } 24*67e74705SXin Li { 25*67e74705SXin Li struct S { 26*67e74705SXin Li void L3b() {} 27*67e74705SXin Li }; 28*67e74705SXin Li S().L3b(); 29*67e74705SXin Li } 30*67e74705SXin Li } 31*67e74705SXin Li }; 32*67e74705SXin Li S().L2(); 33*67e74705SXin Li } 34*67e74705SXin Li { 35*67e74705SXin Li struct S { 36*67e74705SXin Li void L2() { 37*67e74705SXin Li { 38*67e74705SXin Li struct S { 39*67e74705SXin Li void L3c() {} 40*67e74705SXin Li }; 41*67e74705SXin Li S().L3c(); 42*67e74705SXin Li } 43*67e74705SXin Li { 44*67e74705SXin Li struct S { 45*67e74705SXin Li void L3d() {} 46*67e74705SXin Li }; 47*67e74705SXin Li S().L3d(); 48*67e74705SXin Li } 49*67e74705SXin Li } 50*67e74705SXin Li }; 51*67e74705SXin Li S().L2(); 52*67e74705SXin Li } 53*67e74705SXin Li } 54*67e74705SXin Li F()55*67e74705SXin Livoid F() { 56*67e74705SXin Li struct S { 57*67e74705SXin Li struct T { 58*67e74705SXin Li struct S { 59*67e74705SXin Li struct T { 60*67e74705SXin Li void G() {} 61*67e74705SXin Li }; 62*67e74705SXin Li }; 63*67e74705SXin Li }; 64*67e74705SXin Li }; 65*67e74705SXin Li S::T::S::T().G(); 66*67e74705SXin Li } 67*67e74705SXin Li 68*67e74705SXin Li struct B { virtual void Foo() = 0; }; 69*67e74705SXin Li void G(const B &); 70*67e74705SXin Li H()71*67e74705SXin Livoid H() { 72*67e74705SXin Li struct S { 73*67e74705SXin Li void I() { 74*67e74705SXin Li struct S : B { 75*67e74705SXin Li virtual void Foo() {} 76*67e74705SXin Li }; 77*67e74705SXin Li G(S()); 78*67e74705SXin Li } 79*67e74705SXin Li }; 80*67e74705SXin Li S().I(); 81*67e74705SXin Li } 82