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