// RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s struct X {}; // CHECK: define void @_Z1f1XS_( void f(X, X) { } // CHECK: define void @_Z1fR1XS0_( void f(X&, X&) { } // CHECK: define void @_Z1fRK1XS1_( void f(const X&, const X&) { } typedef void T(); struct S {}; // CHECK: define void @_Z1fPFvvEM1SFvvE( void f(T*, T (S::*)) {} namespace A { struct A { }; struct B { }; }; // CHECK: define void @_Z1fN1A1AENS_1BE( void f(A::A a, A::B b) { } struct C { struct D { }; }; // CHECK: define void @_Z1fN1C1DERS_PS_S1_( void f(C::D, C&, C*, C&) { } template struct V { typedef int U; }; template void f1(typename V::U, V) { } // CHECK: @_Z2f1IiEvN1VIT_E1UES2_ template void f1(int, V); template void f2(V, typename V::U) { } // CHECK: @_Z2f2IiEv1VIT_ENS2_1UE template void f2(V, int); namespace NS { template struct S1 {}; template void ft3(S1, S1) { } // CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE template void ft3(S1, S1); }