1 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
2
3 struct A {
4 virtual void f();
5 virtual void f_const() const;
6
7 A h();
8 };
9
10 A g();
11
f(A a,A * ap,A & ar)12 void 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
40 struct B {
41 virtual void f();
42 ~B();
43
44 B h();
45 };
46
47
f()48 void f() {
49 // CHECK: call void @_ZN1B1fEv
50 B().f();
51
52 // CHECK: call void @_ZN1B1fEv
53 B().h().f();
54 }
55
56