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