// 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 void @"\01?foo@@YAXXZ" void __cdecl bar(); void bar(); void bar() {} // GCABI-LABEL: define void @_Z3barv() // MSABI: define void @"\01?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 x86_thiscallcc void @"\01?baz@A@@QAEXXZ" void A::qux() {} // GCABI-LABEL: define void @_ZN1A3quxEv // MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ" void __cdecl static_baz() {} // GCABI-LABEL: define void @_Z10static_bazv // MSABI: define void @"\01?static_baz@@YAXXZ" void static_qux() {} // GCABI-LABEL: define void @_Z10static_quxv // MSABI: define void @"\01?static_qux@@YAXXZ"