1142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fapple-kext -emit-llvm -o - %s | FileCheck %s
2142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
3142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianstruct Base {
4142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian  virtual ~Base();
5142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian} ;
6142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
7142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianstruct Derived : Base {
8142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian  void operator delete(void *) { }
9142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian  Derived();
10142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian};
11142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
12142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianvoid foo() {
13142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian  Derived d1;			// ok
14142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian}
15142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
165584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define internal i32 @_Z1fj(
17142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianinline unsigned f(unsigned n) { return n == 0 ? 0 : n + f(n-1); }
18142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
19142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianunsigned g(unsigned n) { return f(n); }
20142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
215584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// rdar://problem/10133200: give explicit instantiations external linkage in kernel mode
225584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define void @_Z3barIiEvv()
235584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCalltemplate <typename T> void bar() {}
245584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCalltemplate void bar<int>();
25142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
265584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define internal i32 @_Z5identIiET_S0_(
27142f9e99018a85105cee570133c111a52f2053ecFariborz Jahaniantemplate <typename X> X ident(X x) { return x; }
285584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall
29142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanianint foo(int n) { return ident(n); }
30142f9e99018a85105cee570133c111a52f2053ecFariborz Jahanian
315584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define internal void @_ZN7DerivedD1Ev(
325584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define internal void @_ZN7DerivedD0Ev(
335584d91c938384b57563edbca5c2d4f1c66ff02aJohn McCall// CHECK: define internal void @_ZN7DeriveddlEPv(
34