Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm %s -o - | FileCheck -check-prefix GCABI %s
      2 // RUN: %clang_cc1 -emit-llvm %s -o - -DMS_ABI -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-LABEL: define void @_Z3foov()
     16 // MSABI: define void @"\01?foo@@YAXXZ"
     17 
     18 void __cdecl bar();
     19 void bar();
     20 void bar() {}
     21 // GCABI-LABEL: 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-LABEL: define void @_ZN1A3bazEv
     37 // MSABI: define x86_thiscallcc void @"\01?baz@A@@QAEXXZ"
     38 void A::qux() {}
     39 // GCABI-LABEL: define void @_ZN1A3quxEv
     40 // MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ"
     41 
     42 void __cdecl static_baz() {}
     43 // GCABI-LABEL: define void @_Z10static_bazv
     44 // MSABI: define void @"\01?static_baz@@YAXXZ"
     45 void static_qux() {}
     46 // GCABI-LABEL: define void @_Z10static_quxv
     47 // MSABI: define void @"\01?static_qux@@YAXXZ"
     48