mangle.cpp revision 7624f219388f2434a4988ba2508a6ca7b57ba1c3
1// RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s 2 3struct X { }; 4struct Y { }; 5 6// CHECK: @unmangled_variable = global 7// CHECK: @_ZN1N1iE = global 8// CHECK: @_ZZN1N1fEiiE1b = internal global 9// CHECK: @_ZZN1N1gEvE1a = internal global 10// CHECK: @_ZGVZN1N1gEvE1a = internal global 11 12// CHECK: define zeroext i1 @_ZplRK1YRA100_P1X 13bool operator+(const Y&, X* (&xs)[100]) { return false; } 14 15// CHECK: define void @_Z1f1s 16typedef struct { int a; } s; 17void f(s) { } 18 19// CHECK: define void @_Z1f1e 20typedef enum { foo } e; 21void f(e) { } 22 23// CHECK: define void @_Z1f1u 24typedef union { int a; } u; 25void f(u) { } 26 27// CHECK: define void @_Z1f1x 28typedef struct { int a; } x,y; 29void f(y) { } 30 31// CHECK: define void @_Z1fv 32void f() { } 33 34// CHECK: define void @_ZN1N1fEv 35namespace N { void f() { } } 36 37// CHECK: define void @_ZN1N1N1fEv 38namespace N { namespace N { void f() { } } } 39 40// CHECK: define void @unmangled_function 41extern "C" { namespace N { void unmangled_function() { } } } 42 43extern "C" { namespace N { int unmangled_variable = 10; } } 44 45namespace N { int i; } 46 47namespace N { int f(int, int) { static int b; return b; } } 48 49namespace N { int h(); void g() { static int a = h(); } } 50 51// CHECK: define void @_Z1fno 52void f(__int128_t, __uint128_t) { } 53 54template <typename T> struct S1 {}; 55 56// CHECK: define void @_Z1f2S1IiE 57void f(S1<int>) {} 58 59// CHECK: define void @_Z1f2S1IdE 60void f(S1<double>) {} 61 62template <int N> struct S2 {}; 63// CHECK: define void @_Z1f2S2ILi100EE 64void f(S2<100>) {} 65 66// CHECK: define void @_Z1f2S2ILin100EE 67void f(S2<-100>) {} 68 69template <bool B> struct S3 {}; 70 71// CHECK: define void @_Z1f2S3ILb1EE 72void f(S3<true>) {} 73 74// CHECK: define void @_Z1f2S3ILb0EE 75void f(S3<false>) {} 76 77// CHECK: define void @_Z2f22S3ILb1EE 78void f2(S3<100>) {} 79 80struct S; 81 82// CHECK: define void @_Z1fM1SKFvvE 83void f(void (S::*)() const) {} 84 85// CHECK: define void @_Z1fM1SFvvE 86void f(void (S::*)()) {} 87 88// CHECK: define void @_Z1fi 89void f(const int) { } 90 91template<typename T, typename U> void ft1(U u, T t) { } 92 93template<typename T> void ft2(T t, void (*)(T), void (*)(T)) { } 94 95template<typename T, typename U = S1<T> > struct S4 { }; 96template<typename T> void ft3(S4<T>*) { } 97 98void g() { 99 ft2<int>(0); 100} 101extern "C++" { 102 // CHECK: @_Z1hv 103 void h() { } 104} 105 106void g() { 107 // CHECK: @_Z3ft1IidEvT0_T_ 108 ft1<int, double>(1, 0); 109 110 // CHECK: @_Z3ft2IcEvT_PFvS0_ES2_ 111 ft2<char>(1, 0, 0); 112 113 // CHECK: @_Z3ft3IiEvP2S4IT_2S1IS1_EE 114 ft3<int>(0); 115} 116