blob: a528054d8d09a6f71de5fc96c6e10a6a2399d48f [file] [log] [blame]
Charles Davis65161d12010-06-16 05:33:16 +00001// RUN: %clang_cc1 -fms-extensions -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-apple-darwin10 | FileCheck %s
Charles Davise60cea82010-06-11 03:07:32 +00002
Charles Davisb021f8b2010-06-14 05:29:01 +00003// CHECK: @"\01?a@@3HA"
4// CHECK: @"\01?b@N@@3HA"
Charles Davis570d2762010-06-12 08:11:16 +00005// CHECK: @c
Charles Davisb021f8b2010-06-14 05:29:01 +00006// CHECK: @"\01?d@foo@@0FB"
7// CHECK: @"\01?e@foo@@1JC"
8// CHECK: @"\01?f@foo@@2DD"
Charles Davisc62458f2010-06-18 07:51:00 +00009// CHECK: @"\01?g@bar@@2HA"
Charles Davis570d2762010-06-12 08:11:16 +000010
11int a;
Charles Davise60cea82010-06-11 03:07:32 +000012
13namespace N { int b; }
Charles Davis570d2762010-06-12 08:11:16 +000014
15static int c;
16int _c(void) {return c;}
Charles Davis65161d12010-06-16 05:33:16 +000017// CHECK: @"\01?_c@@YAHXZ"
Charles Davis570d2762010-06-12 08:11:16 +000018
Charles Davisb021f8b2010-06-14 05:29:01 +000019class foo {
20 static const short d;
21protected:
22 static volatile long e;
23public:
24 static const volatile char f;
Charles Davis21e2a7e2010-06-17 06:47:31 +000025 int operator+(int a);
Charles Davisb021f8b2010-06-14 05:29:01 +000026};
27
Charles Davisc62458f2010-06-18 07:51:00 +000028struct bar {
29 static int g;
30};
31
32union baz {
33 int a;
34 char b;
35 double c;
36};
37
38enum quux {
39 qone,
40 qtwo,
41 qthree
42};
43
Charles Davis21e2a7e2010-06-17 06:47:31 +000044int foo::operator+(int a) {return a;}
45// CHECK: @"\01??Hfoo@@QAAHH@Z"
46
Charles Davisb021f8b2010-06-14 05:29:01 +000047const short foo::d = 0;
48volatile long foo::e;
49const volatile char foo::f = 'C';
50
Charles Davisc62458f2010-06-18 07:51:00 +000051int bar::g;
52
Charles Davis65161d12010-06-16 05:33:16 +000053// Static functions are mangled, too.
54// Also make sure calling conventions, arglists, and throw specs work.
55static void __stdcall alpha(float a, double b) throw() {}
56bool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) {
57// CHECK: @"\01?beta@@YI_N_J_W@CE@"
58 alpha(0.f, 0.0);
59 return false;
60}
61
62// CHECK: @"\01?alpha@@YGXMN@@"
63
Charles Davisc62458f2010-06-18 07:51:00 +000064// Make sure tag-type mangling works.
65void gamma(class foo, struct bar, union baz, enum quux) {}
66// CHECK: @"\01?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z"
67