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