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