1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | \ 2*67e74705SXin Li // RUN: FileCheck --check-prefix=WIN %s 3*67e74705SXin Li // 4*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-mingw32 | \ 5*67e74705SXin Li // RUN: FileCheck --check-prefix=ITANIUM %s 6*67e74705SXin Li f1(void)7*67e74705SXin Livoid __stdcall f1(void) {} 8*67e74705SXin Li // WIN: define x86_stdcallcc void @"\01?f1@@YGXXZ" 9*67e74705SXin Li // ITANIUM: define x86_stdcallcc void @"\01__Z2f1v@0" 10*67e74705SXin Li f2(void)11*67e74705SXin Livoid __fastcall f2(void) {} 12*67e74705SXin Li // WIN: define x86_fastcallcc void @"\01?f2@@YIXXZ" 13*67e74705SXin Li // ITANIUM: define x86_fastcallcc void @"\01@_Z2f2v@0" 14*67e74705SXin Li f3(void)15*67e74705SXin Liextern "C" void __stdcall f3(void) {} 16*67e74705SXin Li // WIN: define x86_stdcallcc void @"\01_f3@0" 17*67e74705SXin Li // ITANIUM: define x86_stdcallcc void @"\01_f3@0" 18*67e74705SXin Li f4(void)19*67e74705SXin Liextern "C" void __fastcall f4(void) {} 20*67e74705SXin Li // WIN: define x86_fastcallcc void @"\01@f4@0" 21*67e74705SXin Li // ITANIUM: define x86_fastcallcc void @"\01@f4@0" 22*67e74705SXin Li 23*67e74705SXin Li struct Foo { 24*67e74705SXin Li void __stdcall foo(); 25*67e74705SXin Li static void __stdcall bar(); 26*67e74705SXin Li }; 27*67e74705SXin Li foo()28*67e74705SXin Livoid Foo::foo() {} 29*67e74705SXin Li // WIN: define x86_stdcallcc void @"\01?foo@Foo@@QAGXXZ" 30*67e74705SXin Li // ITANIUM: define x86_stdcallcc void @"\01__ZN3Foo3fooEv@4" 31*67e74705SXin Li bar()32*67e74705SXin Livoid Foo::bar() {} 33*67e74705SXin Li // WIN: define x86_stdcallcc void @"\01?bar@Foo@@SGXXZ" 34*67e74705SXin Li // ITANIUM: define x86_stdcallcc void @"\01__ZN3Foo3barEv@0" 35*67e74705SXin Li 36*67e74705SXin Li // Mostly a test that we don't crash and that the names start with a \01. 37*67e74705SXin Li // gcc on mingw produces __Zpp@4 38*67e74705SXin Li // cl produces _++@4 operator ++(Foo & x)39*67e74705SXin Liextern "C" void __stdcall operator++(Foo &x) { 40*67e74705SXin Li } 41*67e74705SXin Li // WIN: define x86_stdcallcc void @"\01??E@YGXAAUFoo@@@Z" 42*67e74705SXin Li // ITANIUM: define x86_stdcallcc void @"\01__ZppR3Foo@4" 43