Anders Carlsson | 7ed5ea9 | 2009-09-17 04:13:54 +0000 | [diff] [blame] | 1 | // RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s |
Anders Carlsson | 7696737 | 2009-09-17 00:43:46 +0000 | [diff] [blame] | 2 | |
| 3 | struct X {}; |
| 4 | |
Anders Carlsson | 6862fc7 | 2009-09-17 04:16:28 +0000 | [diff] [blame] | 5 | // CHECK: define void @_Z1f1XS_( |
Anders Carlsson | 7696737 | 2009-09-17 00:43:46 +0000 | [diff] [blame] | 6 | void f(X, X) { } |
| 7 | |
Anders Carlsson | 6862fc7 | 2009-09-17 04:16:28 +0000 | [diff] [blame] | 8 | // CHECK: define void @_Z1fR1XS0_( |
Anders Carlsson | 7696737 | 2009-09-17 00:43:46 +0000 | [diff] [blame] | 9 | void f(X&, X&) { } |
| 10 | |
Anders Carlsson | 6862fc7 | 2009-09-17 04:16:28 +0000 | [diff] [blame] | 11 | // CHECK: define void @_Z1fRK1XS1_( |
Anders Carlsson | 7696737 | 2009-09-17 00:43:46 +0000 | [diff] [blame] | 12 | void f(const X&, const X&) { } |
| 13 | |
| 14 | typedef void T(); |
| 15 | struct S {}; |
| 16 | |
Anders Carlsson | 6862fc7 | 2009-09-17 04:16:28 +0000 | [diff] [blame] | 17 | // CHECK: define void @_Z1fPFvvEM1SFvvE( |
Anders Carlsson | 7696737 | 2009-09-17 00:43:46 +0000 | [diff] [blame] | 18 | void f(T*, T (S::*)) {} |
| 19 | |
Anders Carlsson | 6862fc7 | 2009-09-17 04:16:28 +0000 | [diff] [blame] | 20 | namespace A { |
| 21 | struct A { }; |
| 22 | struct B { }; |
| 23 | }; |
| 24 | |
| 25 | // CHECK: define void @_Z1fN1A1AENS_1BE( |
| 26 | void f(A::A a, A::B b) { } |
Anders Carlsson | d99edc4 | 2009-09-26 03:55:37 +0000 | [diff] [blame] | 27 | |
| 28 | struct C { |
| 29 | struct D { }; |
| 30 | }; |
| 31 | |
| 32 | // CHECK: define void @_Z1fN1C1DERS_PS_S1_( |
| 33 | void f(C::D, C&, C*, C&) { } |
Anders Carlsson | 8859917 | 2009-09-27 01:06:07 +0000 | [diff] [blame] | 34 | |
| 35 | template<typename T> |
| 36 | struct V { |
| 37 | typedef int U; |
| 38 | }; |
| 39 | |
| 40 | template <typename T> void f1(typename V<T>::U, V<T>) { } |
| 41 | |
| 42 | // CHECK: @_Z2f1IiEvN1VIT_E1UES2_ |
| 43 | template void f1<int>(int, V<int>); |
| 44 | |
| 45 | template <typename T> void f2(V<T>, typename V<T>::U) { } |
| 46 | |
| 47 | // CHECK: @_Z2f2IiEv1VIT_ENS2_1UE |
| 48 | template void f2<int>(V<int>, int); |
Anders Carlsson | e45117b | 2009-09-27 19:53:49 +0000 | [diff] [blame] | 49 | |
| 50 | namespace NS { |
| 51 | template <typename T> struct S1 {}; |
| 52 | template<typename T> void ft3(S1<T>, S1<char>) { } |
| 53 | |
| 54 | // CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE |
| 55 | template void ft3<int>(S1<int>, S1<char>); |
| 56 | } |
Anders Carlsson | 410f764 | 2009-10-16 02:06:06 +0000 | [diff] [blame] | 57 | |
| 58 | // PR5196 |
| 59 | // CHECK: @_Z1fPKcS0_ |
| 60 | void f(const char*, const char*) {} |
| 61 | |
Anders Carlsson | 433d137 | 2009-11-07 04:26:04 +0000 | [diff] [blame] | 62 | namespace NS { |
| 63 | class C; |
| 64 | } |
| 65 | |
| 66 | namespace NS { |
| 67 | // CHECK: @_ZN2NS1fERNS_1CE |
| 68 | void f(C&) { } |
| 69 | } |