// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s

struct X {};

// CHECK-LABEL: define void @_Z1f1XS_(
void f(X, X) { }

// CHECK-LABEL: define void @_Z1fR1XS0_(
void f(X&, X&) { }

// CHECK-LABEL: define void @_Z1fRK1XS1_(
void f(const X&, const X&) { }

typedef void T();
struct S {};

// CHECK-LABEL: define void @_Z1fPFvvEM1SFvvE(
void f(T*, T (S::*)) {}

namespace A {
  struct A { };
  struct B { };
};

// CHECK-LABEL: define void @_Z1fN1A1AENS_1BE(
void f(A::A a, A::B b) { }

struct C {
  struct D { };
};

// CHECK-LABEL: define void @_Z1fN1C1DERS_PS_S1_(
void f(C::D, C&, C*, C&) { }

template<typename T>
struct V {
  typedef int U;
};

template <typename T> void f1(typename V<T>::U, V<T>) { }

// CHECK: @_Z2f1IiEvN1VIT_E1UES2_
template void f1<int>(int, V<int>);

template <typename T> void f2(V<T>, typename V<T>::U) { }

// CHECK: @_Z2f2IiEv1VIT_ENS2_1UE
template void f2<int>(V<int>, int);

namespace NS {
template <typename T> struct S1 {};
template<typename T> void ft3(S1<T>, S1<char>) {  }

// CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE
template void ft3<int>(S1<int>, S1<char>);
}

// PR5196
// CHECK: @_Z1fPKcS0_
void f(const char*, const char*) {}

namespace NS {
  class C;
}

namespace NS {
  // CHECK: @_ZN2NS1fERNS_1CE
  void f(C&) { } 
}

namespace Test1 {

struct A { };
struct B { };

// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_
void f(void (B::*)(), A, A) { }

// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_MS0_FvS3_EMS3_FvvE
void f(void (B::*)(), A, A, void (B::*)(A), void (A::*)()) { }

}

namespace ManglePrefix {
template <typename>
struct X {
  template <typename>
  struct Y {
    typedef int type;
    typedef int type2;
  };
};
template <typename T>
typename X<T>::template Y<T>::type f(typename X<T>::template Y<T>::type2) { return 0; }

// CHECK: @_ZN12ManglePrefix1fIiEENS_1XIT_E1YIS2_E4typeENS5_5type2E
template int f<int>(int);
}
