blob: cbf55ad6133189f2e4a96bc243463c39096c266e [file] [log] [blame]
Anders Carlsson8e7670d2009-10-12 19:41:04 +00001// RUN: clang-cc %s -emit-llvm -o - | FileCheck %s
2
3struct A {
4 virtual void f();
Anders Carlssoncf5deec2009-10-12 19:51:33 +00005
6 A h();
Anders Carlsson8e7670d2009-10-12 19:41:04 +00007};
8
Anders Carlssoncf5deec2009-10-12 19:51:33 +00009A g();
10
Anders Carlsson8e7670d2009-10-12 19:41:04 +000011void 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();
Anders Carlsson76366482009-10-12 19:45:47 +000022
23 // CHECK: call void @_ZN1A1fEv
24 A().f();
Anders Carlssoncf5deec2009-10-12 19:51:33 +000025
26 // CHECK: call void @_ZN1A1fEv
27 g().f();
28
29 // CHECK: call void @_ZN1A1fEv
30 a.h().f();
Anders Carlsson8e7670d2009-10-12 19:41:04 +000031}
Anders Carlsson4a0d8322009-10-12 19:59:15 +000032
33struct B {
34 virtual void f();
35 ~B();
36
37 B h();
38};
39
40
41void f() {
42 // CHECK: call void @_ZN1B1fEv
43 B().f();
44
45 // CHECK: call void @_ZN1B1fEv
46 B().h().f();
47}