blob: 74795b5dfb0efab96b889836de86468c65092985 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
Anders Carlsson8e7670d2009-10-12 19:41:04 +00002
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}