1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
27696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
37696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonstruct X {};
47696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1f1XS_(
67696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonvoid f(X, X) { }
77696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1fR1XS0_(
97696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonvoid f(X&, X&) { }
107696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
1193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1fRK1XS1_(
127696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonvoid f(const X&, const X&) { }
137696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
147696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssontypedef void T();
157696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonstruct S {};
167696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
1793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1fPFvvEM1SFvvE(
187696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlssonvoid f(T*, T (S::*)) {}
197696737d41321cf20aef1aab1454872f2ff7a1c8Anders Carlsson
206862fc720b8e35ee4408822b2390020f263646b2Anders Carlssonnamespace A {
216862fc720b8e35ee4408822b2390020f263646b2Anders Carlsson  struct A { };
226862fc720b8e35ee4408822b2390020f263646b2Anders Carlsson  struct B { };
236862fc720b8e35ee4408822b2390020f263646b2Anders Carlsson};
246862fc720b8e35ee4408822b2390020f263646b2Anders Carlsson
2593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1fN1A1AENS_1BE(
266862fc720b8e35ee4408822b2390020f263646b2Anders Carlssonvoid f(A::A a, A::B b) { }
27d99edc44300b36732a14c294c93899ba28d479eaAnders Carlsson
28d99edc44300b36732a14c294c93899ba28d479eaAnders Carlssonstruct C {
29d99edc44300b36732a14c294c93899ba28d479eaAnders Carlsson  struct D { };
30d99edc44300b36732a14c294c93899ba28d479eaAnders Carlsson};
31d99edc44300b36732a14c294c93899ba28d479eaAnders Carlsson
3293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_Z1fN1C1DERS_PS_S1_(
33d99edc44300b36732a14c294c93899ba28d479eaAnders Carlssonvoid f(C::D, C&, C*, C&) { }
3488599176d106453935a8fa984f690362cc48b470Anders Carlsson
3588599176d106453935a8fa984f690362cc48b470Anders Carlssontemplate<typename T>
3688599176d106453935a8fa984f690362cc48b470Anders Carlssonstruct V {
3788599176d106453935a8fa984f690362cc48b470Anders Carlsson  typedef int U;
3888599176d106453935a8fa984f690362cc48b470Anders Carlsson};
3988599176d106453935a8fa984f690362cc48b470Anders Carlsson
4088599176d106453935a8fa984f690362cc48b470Anders Carlssontemplate <typename T> void f1(typename V<T>::U, V<T>) { }
4188599176d106453935a8fa984f690362cc48b470Anders Carlsson
4288599176d106453935a8fa984f690362cc48b470Anders Carlsson// CHECK: @_Z2f1IiEvN1VIT_E1UES2_
4388599176d106453935a8fa984f690362cc48b470Anders Carlssontemplate void f1<int>(int, V<int>);
4488599176d106453935a8fa984f690362cc48b470Anders Carlsson
4588599176d106453935a8fa984f690362cc48b470Anders Carlssontemplate <typename T> void f2(V<T>, typename V<T>::U) { }
4688599176d106453935a8fa984f690362cc48b470Anders Carlsson
4788599176d106453935a8fa984f690362cc48b470Anders Carlsson// CHECK: @_Z2f2IiEv1VIT_ENS2_1UE
4888599176d106453935a8fa984f690362cc48b470Anders Carlssontemplate void f2<int>(V<int>, int);
49e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlsson
50e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlssonnamespace NS {
51e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlssontemplate <typename T> struct S1 {};
52e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlssontemplate<typename T> void ft3(S1<T>, S1<char>) {  }
53e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlsson
54e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlsson// CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE
55e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlssontemplate void ft3<int>(S1<int>, S1<char>);
56e45117b945a0d8c1fdcc4cd8ee4500f5ee8742beAnders Carlsson}
57410f7640cfa7483132b1524138b1333b9fb9ab33Anders Carlsson
58410f7640cfa7483132b1524138b1333b9fb9ab33Anders Carlsson// PR5196
59410f7640cfa7483132b1524138b1333b9fb9ab33Anders Carlsson// CHECK: @_Z1fPKcS0_
60410f7640cfa7483132b1524138b1333b9fb9ab33Anders Carlssonvoid f(const char*, const char*) {}
61410f7640cfa7483132b1524138b1333b9fb9ab33Anders Carlsson
62433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlssonnamespace NS {
63433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson  class C;
64433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson}
65433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson
66433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlssonnamespace NS {
67433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson  // CHECK: @_ZN2NS1fERNS_1CE
68433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson  void f(C&) { }
69433d1374409a8eeaa4b0975fa187a542d5e40c23Anders Carlsson}
709d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson
719d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlssonnamespace Test1 {
729d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson
739d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlssonstruct A { };
749d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlssonstruct B { };
759d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson
769d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_
779d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlssonvoid f(void (B::*)(), A, A) { }
789d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson
799d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_MS0_FvS3_EMS3_FvvE
809d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlssonvoid f(void (B::*)(), A, A, void (B::*)(A), void (A::*)()) { }
819d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson
829d85b7203b4cb638e45e64e8378338aa256699cdAnders Carlsson}
83