blob: 5eede66cd7b47501159b2342207b5c0e2ae50296 [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
Anders Carlssond7432df2009-10-12 19:41:04 +00002
3struct A {
4 virtual void f();
Anders Carlssonc53d9e82011-04-10 18:20:53 +00005 virtual void f_const() const;
6
Anders Carlsson2a017092009-10-12 19:51:33 +00007 A h();
Anders Carlssond7432df2009-10-12 19:41:04 +00008};
9
Anders Carlsson2a017092009-10-12 19:51:33 +000010A g();
11
Anders Carlssond7432df2009-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 Carlssonb61301f2009-10-12 19:45:47 +000023
24 // CHECK: call void @_ZN1A1fEv
25 A().f();
Anders Carlsson2a017092009-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 Carlssonc53d9e82011-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 Carlssond7432df2009-10-12 19:41:04 +000038}
Anders Carlssona1b54fd2009-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 Carlssonc53d9e82011-04-10 18:20:53 +000055