// RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm %s -o - | FileCheck -check-prefix GCABI %s // RUN: %clang_cc1 -emit-llvm %s -o - -DMS_ABI -triple=i386-pc-win32 | FileCheck -check-prefix MSABI %s #ifdef MS_ABI # define METHOD_CC __thiscall #else # define METHOD_CC __attribute__ ((cdecl)) #endif // Test that it's OK to have multiple function declarations with the default CC // both mentioned explicitly and implied. void foo(); void __cdecl foo(); void __cdecl foo() {} // GCABI-LABEL: define{{.*}} void @_Z3foov() // MSABI: define dso_local void @"?foo@@YAXXZ" void __cdecl bar(); void bar(); void bar() {} // GCABI-LABEL: define{{.*}} void @_Z3barv() // MSABI: define dso_local void @"?bar@@YAXXZ" // Test that it's OK to mark either the method declaration or method definition // with a default CC explicitly. class A { public: void baz(); void METHOD_CC qux(); static void static_baz(); static void __cdecl static_qux(); }; void METHOD_CC A::baz() {} // GCABI-LABEL: define{{.*}} void @_ZN1A3bazEv // MSABI: define dso_local x86_thiscallcc void @"?baz@A@@QAEXXZ" void A::qux() {} // GCABI-LABEL: define{{.*}} void @_ZN1A3quxEv // MSABI: define dso_local x86_thiscallcc void @"?qux@A@@QAEXXZ" void __cdecl static_baz() {} // GCABI-LABEL: define{{.*}} void @_Z10static_bazv // MSABI: define dso_local void @"?static_baz@@YAXXZ" void static_qux() {} // GCABI-LABEL: define{{.*}} void @_Z10static_quxv // MSABI: define dso_local void @"?static_qux@@YAXXZ" namespace PR31656 { template void __cdecl callee(int args[I]); // GCABI-LABEL: declare void @_ZN7PR316566calleeILi1EEEvPi( // MSABI: declare dso_local void @"??$callee@$00@PR31656@@YAXQAH@Z"( void caller() { callee<1>(0); } }