forked from OSchip/llvm-project
106 lines
2.1 KiB
C++
106 lines
2.1 KiB
C++
// RUN: %clang_cc1 -fms-extensions -fblocks -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-pc-win32 | FileCheck %s
|
|
|
|
// CHECK: @"\01?a@@3HA"
|
|
// CHECK: @"\01?b@N@@3HA"
|
|
// CHECK: @c
|
|
// CHECK: @"\01?d@foo@@0FB"
|
|
// CHECK: @"\01?e@foo@@1JC"
|
|
// CHECK: @"\01?f@foo@@2DD"
|
|
// CHECK: @"\01?g@bar@@2HA"
|
|
// CHECK: @"\01?h@@3QAHA"
|
|
// CHECK: @"\01?i@@3PAY0BE@HA"
|
|
// CHECK: @"\01?j@@3P6GHCE@ZA"
|
|
// CHECK: @"\01?k@@3PTfoo@@DA"
|
|
// CHECK: @"\01?l@@3P8foo@@AEHH@ZA"
|
|
|
|
int a;
|
|
|
|
namespace N { int b; }
|
|
|
|
static int c;
|
|
int _c(void) {return c;}
|
|
// CHECK: @"\01?_c@@YAHXZ"
|
|
|
|
class foo {
|
|
static const short d;
|
|
protected:
|
|
static volatile long e;
|
|
public:
|
|
static const volatile char f;
|
|
int operator+(int a);
|
|
foo(){}
|
|
//CHECK: @"\01??0foo@@QAE@XZ"
|
|
|
|
~foo(){}
|
|
//CHECK: @"\01??1foo@@QAE@XZ"
|
|
|
|
foo(int i){}
|
|
//CHECK: @"\01??0foo@@QAE@H@Z"
|
|
|
|
foo(char *q){}
|
|
//CHECK: @"\01??0foo@@QAE@PAD@Z"
|
|
}f,s1(1),s2((char*)0);
|
|
|
|
struct bar {
|
|
static int g;
|
|
};
|
|
|
|
union baz {
|
|
int a;
|
|
char b;
|
|
double c;
|
|
};
|
|
|
|
enum quux {
|
|
qone,
|
|
qtwo,
|
|
qthree
|
|
};
|
|
|
|
int foo::operator+(int a) {return a;}
|
|
// CHECK: @"\01??Hfoo@@QAEHH@Z"
|
|
|
|
const short foo::d = 0;
|
|
volatile long foo::e;
|
|
const volatile char foo::f = 'C';
|
|
|
|
int bar::g;
|
|
|
|
extern int * const h = &a;
|
|
|
|
int i[10][20];
|
|
|
|
int (__stdcall *j)(signed char, unsigned char);
|
|
|
|
const volatile char foo::*k;
|
|
|
|
int (foo::*l)(int);
|
|
|
|
// Static functions are mangled, too.
|
|
// Also make sure calling conventions, arglists, and throw specs work.
|
|
static void __stdcall alpha(float a, double b) throw() {}
|
|
bool __fastcall beta(long long a, wchar_t b) throw(signed char, unsigned char) {
|
|
// CHECK: @"\01?beta@@YI_N_J_W@Z"
|
|
alpha(0.f, 0.0);
|
|
return false;
|
|
}
|
|
|
|
// CHECK: @"\01?alpha@@YGXMN@Z"
|
|
|
|
// Make sure tag-type mangling works.
|
|
void gamma(class foo, struct bar, union baz, enum quux) {}
|
|
// CHECK: @"\01?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z"
|
|
|
|
// Make sure pointer/reference-type mangling works.
|
|
void delta(int * const a, const long &) {}
|
|
// CHECK: @"\01?delta@@YAXQAHABJ@Z"
|
|
|
|
// Array mangling.
|
|
void epsilon(int a[][10][20]) {}
|
|
// CHECK: @"\01?epsilon@@YAXQAY19BE@H@Z"
|
|
|
|
// Blocks mangling (Clang extension).
|
|
void zeta(int (^)(int, int)) {}
|
|
// CHECK: @"\01?zeta@@YAXP_EAHHH@Z@Z"
|
|
|