mangle-ms.cpp revision 3a0d41d29192ff42870310e33800939f4e34bb55
165161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// RUN: %clang_cc1 -fms-extensions -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-apple-darwin10 | FileCheck %s 2e60cea829b3bc45fcfedbfdb08cffb61f5bde79fCharles Davis 3b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis// CHECK: @"\01?a@@3HA" 4b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis// CHECK: @"\01?b@N@@3HA" 5570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis// CHECK: @c 6b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis// CHECK: @"\01?d@foo@@0FB" 7b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis// CHECK: @"\01?e@foo@@1JC" 8b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis// CHECK: @"\01?f@foo@@2DD" 9c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis// CHECK: @"\01?g@bar@@2HA" 103a0d41d29192ff42870310e33800939f4e34bb55Charles Davis// CHECK: @"\01?h@@3QAHA" 11570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 12570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisint a; 13e60cea829b3bc45fcfedbfdb08cffb61f5bde79fCharles Davis 14e60cea829b3bc45fcfedbfdb08cffb61f5bde79fCharles Davisnamespace N { int b; } 15570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 16570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisstatic int c; 17570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisint _c(void) {return c;} 1865161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// CHECK: @"\01?_c@@YAHXZ" 19570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 20b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisclass foo { 21b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static const short d; 22b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisprotected: 23b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static volatile long e; 24b021f8bd445959e2a5c958624a464ff621253ae4Charles Davispublic: 25b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static const volatile char f; 2621e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis int operator+(int a); 27b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis}; 28b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis 29c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisstruct bar { 30c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis static int g; 31c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 32c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 33c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisunion baz { 34c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis int a; 35c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis char b; 36c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis double c; 37c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 38c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 39c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisenum quux { 40c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qone, 41c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qtwo, 42c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qthree 43c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 44c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 4521e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davisint foo::operator+(int a) {return a;} 4621e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis// CHECK: @"\01??Hfoo@@QAAHH@Z" 4721e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis 48b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisconst short foo::d = 0; 49b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisvolatile long foo::e; 50b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisconst volatile char foo::f = 'C'; 51b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis 52c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisint bar::g; 53c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 543a0d41d29192ff42870310e33800939f4e34bb55Charles Davisextern int * const h = &a; 553a0d41d29192ff42870310e33800939f4e34bb55Charles Davis 5665161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// Static functions are mangled, too. 5765161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// Also make sure calling conventions, arglists, and throw specs work. 5865161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davisstatic void __stdcall alpha(float a, double b) throw() {} 5965161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davisbool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) { 603a0d41d29192ff42870310e33800939f4e34bb55Charles Davis// CHECK: @"\01?beta@@YI_N_J_W@Z" 6165161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis alpha(0.f, 0.0); 6265161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis return false; 6365161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis} 6465161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis 653a0d41d29192ff42870310e33800939f4e34bb55Charles Davis// CHECK: @"\01?alpha@@YGXMN@Z" 6665161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis 67c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis// Make sure tag-type mangling works. 68c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisvoid gamma(class foo, struct bar, union baz, enum quux) {} 69c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis// CHECK: @"\01?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z" 70c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 713a0d41d29192ff42870310e33800939f4e34bb55Charles Davis// Make sure pointer/reference-type mangling works. 723a0d41d29192ff42870310e33800939f4e34bb55Charles Davisvoid delta(int * const a, const long &) {} 733a0d41d29192ff42870310e33800939f4e34bb55Charles Davis// CHECK: @"\01?delta@@YAXQAHABJ@Z" 74