1// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s 2 3// CHECK: @_ZTVZN1J1KEvE1C = {{.*}} @_ZTIZN1J1KEvE1C {{.*}} @_ZZN1J1KEvENK1C1FEv 4// CHECK: @_ZTIZN1J1KEvE1C = {{.*}} @_ZTSZN1J1KEvE1C 5// CHECK: @_ZTVZ1GvE1C_1 = {{.*}} @_ZTIZ1GvE1C_1 {{.*}} @_ZZ1GvENK1C1FE_1v 6// CHECK: @_ZTIZ1GvE1C_1 = {{.*}} @_ZTSZ1GvE1C_1 7// CHECK: @_ZTVZ1GvE1C_0 = {{.*}} @_ZTIZ1GvE1C_0 {{.*}} @_ZZ1GvENK1C1FE_0v 8// CHECK: @_ZTIZ1GvE1C_0 = {{.*}} @_ZTSZ1GvE1C_0 9// CHECK: @_ZTVZ1GvE1C = {{.*}} @_ZTIZ1GvE1C {{.*}} @_ZZ1GvENK1C1FEv 10// CHECK: @_ZTIZ1GvE1C = {{.*}} @_ZTSZ1GvE1C 11 12// CHECK: define {{.*}} @_ZZN1J1KEvEN1CC2Ev( 13// CHECK: define {{.*}} @_ZZN1J1KEvENK1C1FEv( 14// CHECK: define {{.*}} @_ZZ1GvEN1CC2E_1v( 15// CHECK: define {{.*}} @_ZZ1GvENK1C1FE_1v( 16// CHECK: define {{.*}} @_ZZ1GvENK1C1HE_1v( 17// CHECK: define {{.*}} @_ZZ1GvEN1CC2E_0v( 18// CHECK: define {{.*}} @_ZZ1GvENK1C1FE_0v( 19// CHECK: define {{.*}} @_ZZ1GvENK1C1GE_0v( 20// CHECK: define {{.*}} @_ZZ1GvEN1CC2Ev( 21// CHECK: define {{.*}} @_ZZ1GvENK1C1FEv( 22 23struct I { 24 virtual void F() const = 0; 25}; 26 27void Go(const I &i); 28 29void 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 52struct J { 53 void K(); 54}; 55 56void J::K() { 57 struct C : I { 58 void F() const {} 59 }; 60 Go(C()); 61} 62