Daniel Dunbar | 7e0c195 | 2009-11-21 09:17:15 +0000 | [diff] [blame^] | 1 | // RUN: clang-cc -emit-llvm -o - %s | FileCheck %s |
| 2 | |
| 3 | namespace test1 { |
| 4 | int x; |
| 5 | template <int& D> class T { }; |
| 6 | // CHECK: void @_ZN5test12f0ENS_1TILZNS_1xEEEE( |
| 7 | void f0(T<x> a0) {} |
| 8 | } |
| 9 | |
| 10 | namespace test1 { |
| 11 | // CHECK: void @_ZN5test12f0Ef |
| 12 | void f0(float) {} |
| 13 | template<void (&)(float)> struct t1 {}; |
| 14 | // CHECK: void @_ZN5test12f1ENS_2t1ILZNS_2f0EfEEE( |
| 15 | void f1(t1<f0> a0) {} |
| 16 | } |
| 17 | |
| 18 | namespace test2 { |
| 19 | // CHECK: void @_ZN5test22f0Ef |
| 20 | void f0(float) {} |
| 21 | template<void (*)(float)> struct t1 {}; |
| 22 | // FIXME: Fails because we don't treat as an expression. |
| 23 | // CHECK-FIXME: void @_ZN5test22f1ENS_2t1IXadL_ZNS_2f0EfEEEE( |
| 24 | void f1(t1<f0> a0) {} |
| 25 | } |
| 26 | |
| 27 | namespace test3 { |
| 28 | // CHECK: void @test3_f0 |
| 29 | extern "C" void test3_f0(float) {} |
| 30 | template<void (&)(float)> struct t1 {}; |
| 31 | // FIXME: Fails because we tack on a namespace. |
| 32 | // CHECK-FIXME: void @_ZN5test32f1ENS_2t1ILZ8test3_f0EEE( |
| 33 | void f1(t1<test3_f0> a0) {} |
| 34 | } |
| 35 | |
| 36 | namespace test4 { |
| 37 | // CHECK: void @test4_f0 |
| 38 | extern "C" void test4_f0(float) {} |
| 39 | template<void (*)(float)> struct t1 {}; |
| 40 | // FIXME: Fails because we don't treat as an expression. |
| 41 | // CHECK-FIXME: void @_ZN5test42f1ENS_2t1IXadL_Z8test4_f0EEEE( |
| 42 | void f1(t1<test4_f0> a0) {} |
| 43 | } |
| 44 | |
| 45 | // CHECK: void @test5_f0 |
| 46 | extern "C" void test5_f0(float) {} |
| 47 | int main(int) {} |
| 48 | |
| 49 | namespace test5 { |
| 50 | template<void (&)(float)> struct t1 {}; |
| 51 | // CHECK: void @_ZN5test52f1ENS_2t1ILZ8test5_f0EEE( |
| 52 | void f1(t1<test5_f0> a0) {} |
| 53 | |
| 54 | template<int (&)(int)> struct t2 {}; |
| 55 | // CHECK: void @_ZN5test52f2ENS_2t2ILZ4mainEEE |
| 56 | void f2(t2<main> a0) {} |
| 57 | } |
| 58 | |
| 59 | // FIXME: This fails. |
| 60 | namespace test6 { |
| 61 | struct A { void im0(float); }; |
| 62 | // CHECK: void @_ZN5test61A3im0Ef |
| 63 | void A::im0(float) {} |
| 64 | template <void(A::*)(float)> class T { }; |
| 65 | // FIXME: Fails because we don't treat as an expression. |
| 66 | // CHECK-FAIL: void @_ZN5test62f0ENS_1TIXadL_ZNS_1A3im0EfEEEE( |
| 67 | void f0(T<&A::im0> a0) {} |
| 68 | } |