|  | // 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" |