blob: 5eede66cd7b47501159b2342207b5c0e2ae50296 [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 Carlssoncd0b32e2011-04-10 18:20:53 +00005 virtual void f_const() const;
6
Anders Carlssoncf5deec2009-10-12 19:51:33 +00007 A h();
Anders Carlsson8e7670d2009-10-12 19:41:04 +00008};
9
Anders Carlssoncf5deec2009-10-12 19:51:33 +000010A g();
11
Anders Carlsson8e7670d2009-10-12 19:41:04 +000012void 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();
Anders Carlsson76366482009-10-12 19:45:47 +000023
24 // CHECK: call void @_ZN1A1fEv
25 A().f();
Anders Carlssoncf5deec2009-10-12 19:51:33 +000026
27 // CHECK: call void @_ZN1A1fEv
28 g().f();
29
30 // CHECK: call void @_ZN1A1fEv
31 a.h().f();
Anders Carlssoncd0b32e2011-04-10 18:20:53 +000032
33 // CHECK: call void @_ZNK1A7f_constEv
34 a.f_const();
35
36 // CHECK: call void @_ZN1A1fEv
37 (a).f();
Anders Carlsson8e7670d2009-10-12 19:41:04 +000038}
Anders Carlsson4a0d8322009-10-12 19:59:15 +000039
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}
Anders Carlssoncd0b32e2011-04-10 18:20:53 +000055