1// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
2
3struct A {
4  virtual void f();
5  virtual void f_const() const;
6
7  A h();
8};
9
10A g();
11
12void f(A a, A *ap, A& ar) {
13  // This should not be a virtual function call.
14
15  // CHECK: call void @_ZN1A1fEv(%struct.A* %a)
16  a.f();
17
18  // CHECK: call void %
19  ap->f();
20
21  // CHECK: call void %
22  ar.f();
23
24  // CHECK: call void @_ZN1A1fEv
25  A().f();
26
27  // CHECK: call void @_ZN1A1fEv
28  g().f();
29
30  // CHECK: call void @_ZN1A1fEv
31  a.h().f();
32
33  // CHECK: call void @_ZNK1A7f_constEv
34  a.f_const();
35
36  // CHECK: call void @_ZN1A1fEv
37  (a).f();
38}
39
40struct B {
41  virtual void f();
42  ~B();
43
44  B h();
45};
46
47
48void f() {
49  // CHECK: call void @_ZN1B1fEv
50  B().f();
51
52  // CHECK: call void @_ZN1B1fEv
53  B().h().f();
54}
55
56