blob: 8c011de28a02328a29344670546d87a36a2c8a3f [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
Anders Carlsson48eda2c2009-12-04 22:35:50 +00002// CHECK: ; ModuleID
3
4struct A {
5 inline void f();
6};
7
8// CHECK-NOT: define void @_ZN1A1fEv
9void A::f() { }
10
11template<typename> struct B { };
12
13template<> struct B<char> {
14 inline void f();
15};
16
17// CHECK-NOT: _ZN1BIcE1fEv
18void B<char>::f() { }
19
20// We need a final CHECK line here.
21
22// CHECK: define void @_Z1fv
23void f() { }
Douglas Gregor8f150942010-12-09 16:59:22 +000024
25// <rdar://problem/8740363>
26inline void f1(int);
27
28// CHECK: define linkonce_odr void @_Z2f1i
29void f1(int) { }
30
31void test_f1() { f1(17); }
John McCallbfdcdc82010-12-15 04:00:32 +000032
33// PR8789
34namespace test1 {
35 template <typename T> class ClassTemplate {
36 private:
37 friend void T::func();
38 void g() {}
39 };
40
41 // CHECK: define linkonce_odr void @_ZN5test11C4funcEv(
42
43 class C {
44 public:
45 void func() {
46 ClassTemplate<C> ct;
47 ct.g();
48 }
49 };
50
51 void f() {
52 C c;
53 c.func();
54 }
55}
Eli Friedmanb135f0f2012-07-02 21:05:30 +000056
57// PR13252
58namespace test2 {
59 struct A;
60 void f(const A& a);
61 struct A {
62 friend void f(const A& a) { }
63 };
64 void g() {
65 A a;
66 f(a);
67 }
68 // CHECK: define linkonce_odr void @_ZN5test21fERKNS_1AE
69}