xref: /llvm-project/clang/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp (revision a1b54fdbe1c3b7a8cab0e15083af7c97cb8d53ea)
1 // RUN: clang-cc %s -emit-llvm -o - | FileCheck %s
2 
3 struct A {
4   virtual void f();
5 
6   A h();
7 };
8 
9 A g();
10 
11 void f(A a, A *ap, A& ar) {
12   // This should not be a virtual function call.
13 
14   // CHECK: call void @_ZN1A1fEv(%struct.A* %a)
15   a.f();
16 
17   // CHECK: call void %
18   ap->f();
19 
20   // CHECK: call void %
21   ar.f();
22 
23   // CHECK: call void @_ZN1A1fEv
24   A().f();
25 
26   // CHECK: call void @_ZN1A1fEv
27   g().f();
28 
29   // CHECK: call void @_ZN1A1fEv
30   a.h().f();
31 }
32 
33 struct B {
34   virtual void f();
35   ~B();
36 
37   B h();
38 };
39 
40 
41 void f() {
42   // CHECK: call void @_ZN1B1fEv
43   B().f();
44 
45   // CHECK: call void @_ZN1B1fEv
46   B().h().f();
47 }
48