1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2 // CHECK: ; ModuleID
3 
4 struct A {
5     inline void f();
6 };
7 
8 // CHECK-NOT-LABEL: define void @_ZN1A1fEv
9 void A::f() { }
10 
11 template<typename> struct B { };
12 
13 template<> struct B<char> {
14   inline void f();
15 };
16 
17 // CHECK-NOT: _ZN1BIcE1fEv
18 void B<char>::f() { }
19 
20 // We need a final CHECK line here.
21 
22 // CHECK-LABEL: define void @_Z1fv
23 void f() { }
24 
25 // <rdar://problem/8740363>
26 inline void f1(int);
27 
28 // CHECK-LABEL: define linkonce_odr void @_Z2f1i
29 void f1(int) { }
30 
31 void test_f1() { f1(17); }
32 
33 // PR8789
34 namespace test1 {
35   template <typename T> class ClassTemplate {
36   private:
37     friend void T::func();
38     void g() {}
39   };
40 
41   // CHECK-LABEL: 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 }
56 
57 // PR13252
58 namespace 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-LABEL: define linkonce_odr void @_ZN5test21fERKNS_1AE
69 }
70