1*67e74705SXin Li // RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm %s -o - | FileCheck -check-prefix GCABI %s 2*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -DMS_ABI -triple=i386-pc-win32 | FileCheck -check-prefix MSABI %s 3*67e74705SXin Li 4*67e74705SXin Li #ifdef MS_ABI 5*67e74705SXin Li # define METHOD_CC __thiscall 6*67e74705SXin Li #else 7*67e74705SXin Li # define METHOD_CC __attribute__ ((cdecl)) 8*67e74705SXin Li #endif 9*67e74705SXin Li 10*67e74705SXin Li // Test that it's OK to have multiple function declarations with the default CC 11*67e74705SXin Li // both mentioned explicitly and implied. 12*67e74705SXin Li void foo(); 13*67e74705SXin Li void __cdecl foo(); foo()14*67e74705SXin Livoid __cdecl foo() {} 15*67e74705SXin Li // GCABI-LABEL: define void @_Z3foov() 16*67e74705SXin Li // MSABI: define void @"\01?foo@@YAXXZ" 17*67e74705SXin Li 18*67e74705SXin Li void __cdecl bar(); 19*67e74705SXin Li void bar(); bar()20*67e74705SXin Livoid bar() {} 21*67e74705SXin Li // GCABI-LABEL: define void @_Z3barv() 22*67e74705SXin Li // MSABI: define void @"\01?bar@@YAXXZ" 23*67e74705SXin Li 24*67e74705SXin Li // Test that it's OK to mark either the method declaration or method definition 25*67e74705SXin Li // with a default CC explicitly. 26*67e74705SXin Li class A { 27*67e74705SXin Li public: 28*67e74705SXin Li void baz(); 29*67e74705SXin Li void METHOD_CC qux(); 30*67e74705SXin Li 31*67e74705SXin Li static void static_baz(); 32*67e74705SXin Li static void __cdecl static_qux(); 33*67e74705SXin Li }; 34*67e74705SXin Li baz()35*67e74705SXin Livoid METHOD_CC A::baz() {} 36*67e74705SXin Li // GCABI-LABEL: define void @_ZN1A3bazEv 37*67e74705SXin Li // MSABI: define x86_thiscallcc void @"\01?baz@A@@QAEXXZ" qux()38*67e74705SXin Livoid A::qux() {} 39*67e74705SXin Li // GCABI-LABEL: define void @_ZN1A3quxEv 40*67e74705SXin Li // MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ" 41*67e74705SXin Li static_baz()42*67e74705SXin Livoid __cdecl static_baz() {} 43*67e74705SXin Li // GCABI-LABEL: define void @_Z10static_bazv 44*67e74705SXin Li // MSABI: define void @"\01?static_baz@@YAXXZ" static_qux()45*67e74705SXin Livoid static_qux() {} 46*67e74705SXin Li // GCABI-LABEL: define void @_Z10static_quxv 47*67e74705SXin Li // MSABI: define void @"\01?static_qux@@YAXXZ" 48