| // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s | 
 |  | 
 | // CHECK: @_ZTVZN1J1KEvE1C = {{.*}} @_ZTIZN1J1KEvE1C {{.*}} @_ZZN1J1KEvENK1C1FEv  | 
 | // CHECK: @_ZTIZN1J1KEvE1C = {{.*}} @_ZTSZN1J1KEvE1C | 
 | // CHECK: @_ZTVZ1GvE1C_1 = {{.*}} @_ZTIZ1GvE1C_1 {{.*}} @_ZZ1GvENK1C1FE_1v  | 
 | // CHECK: @_ZTIZ1GvE1C_1 = {{.*}} @_ZTSZ1GvE1C_1 | 
 | // CHECK: @_ZTVZ1GvE1C_0 = {{.*}} @_ZTIZ1GvE1C_0 {{.*}} @_ZZ1GvENK1C1FE_0v  | 
 | // CHECK: @_ZTIZ1GvE1C_0 = {{.*}} @_ZTSZ1GvE1C_0 | 
 | // CHECK: @_ZTVZ1GvE1C = {{.*}} @_ZTIZ1GvE1C {{.*}} @_ZZ1GvENK1C1FEv  | 
 | // CHECK: @_ZTIZ1GvE1C = {{.*}} @_ZTSZ1GvE1C | 
 |  | 
 | // CHECK: define {{.*}} @_ZZN1J1KEvEN1CC2Ev( | 
 | // CHECK: define {{.*}} @_ZZN1J1KEvENK1C1FEv( | 
 | // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_1v( | 
 | // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_1v( | 
 | // CHECK: define {{.*}} @_ZZ1GvENK1C1HE_1v( | 
 | // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_0v( | 
 | // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_0v( | 
 | // CHECK: define {{.*}} @_ZZ1GvENK1C1GE_0v( | 
 | // CHECK: define {{.*}} @_ZZ1GvEN1CC2Ev( | 
 | // CHECK: define {{.*}} @_ZZ1GvENK1C1FEv( | 
 |  | 
 | struct I {  | 
 |   virtual void F() const = 0; | 
 | }; | 
 |  | 
 | void Go(const I &i); | 
 |  | 
 | void G() {  | 
 |   {  | 
 |     struct C : I {  | 
 |       void F() const {} | 
 |     }; | 
 |     Go(C()); | 
 |   } | 
 |   {  | 
 |     struct C : I {  | 
 |       void F() const { G(); } | 
 |       void G() const {} | 
 |     }; | 
 |     Go(C()); | 
 |   } | 
 |   {  | 
 |     struct C : I {  | 
 |       void F() const { H(); } | 
 |       void H() const {} | 
 |     }; | 
 |     Go(C()); | 
 |   } | 
 | } | 
 |  | 
 | struct J { | 
 |   void K(); | 
 | }; | 
 |  | 
 | void J::K() { | 
 |   struct C : I { | 
 |     void F() const {} | 
 |   }; | 
 |   Go(C()); | 
 | } |