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