1 // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s 2 3 // CHECK: @_ZTVZ1GvE1C = {{.*}} @_ZTIZ1GvE1C {{.*}} @_ZZ1GvENK1C1FEv 4 // CHECK: @_ZTIZ1GvE1C = {{.*}} @_ZTSZ1GvE1C 5 // CHECK: @_ZTVZ1GvE1C_0 = {{.*}} @_ZTIZ1GvE1C_0 {{.*}} @_ZZ1GvENK1C1FE_0v 6 // CHECK: @_ZTIZ1GvE1C_0 = {{.*}} @_ZTSZ1GvE1C_0 7 // CHECK: @_ZTVZ1GvE1C_1 = {{.*}} @_ZTIZ1GvE1C_1 {{.*}} @_ZZ1GvENK1C1FE_1v 8 // CHECK: @_ZTIZ1GvE1C_1 = {{.*}} @_ZTSZ1GvE1C_1 9 // CHECK: @_ZTVZN1J1KEvE1C = {{.*}} @_ZTIZN1J1KEvE1C {{.*}} @_ZZN1J1KEvENK1C1FEv 10 // CHECK: @_ZTIZN1J1KEvE1C = {{.*}} @_ZTSZN1J1KEvE1C 11 12 // CHECK: define {{.*}} @_ZZ1GvEN1CC2Ev( 13 // CHECK: define {{.*}} @_ZZ1GvENK1C1FEv( 14 // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_0v( 15 // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_0v( 16 // CHECK: define {{.*}} @_ZZ1GvENK1C1GE_0v( 17 // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_1v( 18 // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_1v( 19 // CHECK: define {{.*}} @_ZZ1GvENK1C1HE_1v( 20 // CHECK: define {{.*}} @_ZZN1J1KEvEN1CC2Ev( 21 // CHECK: define {{.*}} @_ZZN1J1KEvENK1C1FEv( 22 23 struct I { 24 virtual void F() const = 0; 25 }; 26 27 void Go(const I &i); 28 29 void G() { 30 { 31 struct C : I { 32 void F() const {} 33 }; 34 Go(C()); 35 } 36 { 37 struct C : I { 38 void F() const { G(); } 39 void G() const {} 40 }; 41 Go(C()); 42 } 43 { 44 struct C : I { 45 void F() const { H(); } 46 void H() const {} 47 }; 48 Go(C()); 49 } 50 } 51 52 struct J { 53 void K(); 54 }; 55 56 void J::K() { 57 struct C : I { 58 void F() const {} 59 }; 60 Go(C()); 61 } 62