mangle-ms.cpp revision c62458f6aead5e4c0d0f4534d52142e7864ba02b
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" 10570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 11570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisint a; 12e60cea829b3bc45fcfedbfdb08cffb61f5bde79fCharles Davis 13e60cea829b3bc45fcfedbfdb08cffb61f5bde79fCharles Davisnamespace N { int b; } 14570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 15570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisstatic int c; 16570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davisint _c(void) {return c;} 1765161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// CHECK: @"\01?_c@@YAHXZ" 18570d2763bc9ee6c26b12c0b6316dd87261520bfeCharles Davis 19b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisclass foo { 20b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static const short d; 21b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisprotected: 22b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static volatile long e; 23b021f8bd445959e2a5c958624a464ff621253ae4Charles Davispublic: 24b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis static const volatile char f; 2521e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis int operator+(int a); 26b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis}; 27b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis 28c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisstruct bar { 29c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis static int g; 30c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 31c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 32c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisunion baz { 33c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis int a; 34c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis char b; 35c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis double c; 36c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 37c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 38c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisenum quux { 39c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qone, 40c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qtwo, 41c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis qthree 42c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis}; 43c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 4421e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davisint foo::operator+(int a) {return a;} 4521e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis// CHECK: @"\01??Hfoo@@QAAHH@Z" 4621e2a7e8d38120e358bead9e1f14ed526d37bc90Charles Davis 47b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisconst short foo::d = 0; 48b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisvolatile long foo::e; 49b021f8bd445959e2a5c958624a464ff621253ae4Charles Davisconst volatile char foo::f = 'C'; 50b021f8bd445959e2a5c958624a464ff621253ae4Charles Davis 51c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisint bar::g; 52c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 5365161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// Static functions are mangled, too. 5465161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// Also make sure calling conventions, arglists, and throw specs work. 5565161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davisstatic void __stdcall alpha(float a, double b) throw() {} 5665161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davisbool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) { 5765161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// CHECK: @"\01?beta@@YI_N_J_W@CE@" 5865161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis alpha(0.f, 0.0); 5965161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis return false; 6065161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis} 6165161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis 6265161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis// CHECK: @"\01?alpha@@YGXMN@@" 6365161d17cbf8980e24643c65b74a5127dcb7ac22Charles Davis 64c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis// Make sure tag-type mangling works. 65c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davisvoid gamma(class foo, struct bar, union baz, enum quux) {} 66c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis// CHECK: @"\01?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z" 67c62458f6aead5e4c0d0f4534d52142e7864ba02bCharles Davis 68