| // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s | 
 |  | 
 | struct A { | 
 |   virtual void f(); | 
 |    | 
 |   A h(); | 
 | }; | 
 |  | 
 | A g(); | 
 |  | 
 | void f(A a, A *ap, A& ar) { | 
 |   // This should not be a virtual function call. | 
 |    | 
 |   // CHECK: call void @_ZN1A1fEv(%struct.A* %a) | 
 |   a.f(); | 
 |  | 
 |   // CHECK: call void %   | 
 |   ap->f(); | 
 |  | 
 |   // CHECK: call void %   | 
 |   ar.f(); | 
 |    | 
 |   // CHECK: call void @_ZN1A1fEv | 
 |   A().f(); | 
 |  | 
 |   // CHECK: call void @_ZN1A1fEv | 
 |   g().f(); | 
 |    | 
 |   // CHECK: call void @_ZN1A1fEv | 
 |   a.h().f(); | 
 | } | 
 |  | 
 | struct B { | 
 |   virtual void f(); | 
 |   ~B(); | 
 |    | 
 |   B h(); | 
 | }; | 
 |  | 
 |  | 
 | void f() { | 
 |   // CHECK: call void @_ZN1B1fEv | 
 |   B().f(); | 
 |    | 
 |   // CHECK: call void @_ZN1B1fEv | 
 |   B().h().f(); | 
 | } |