blob: e3ca39221e88da4d34f2e2c599a02692bd065285 [file] [log] [blame]
Rafael Espindola34970692013-12-12 16:07:11 +00001// RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm %s -o - | FileCheck -check-prefix GCABI %s
Hans Wennborgc9bd88e2014-01-14 19:35:09 +00002// RUN: %clang_cc1 -emit-llvm %s -o - -DMS_ABI -triple=i386-pc-win32 | FileCheck -check-prefix MSABI %s
John McCalla5f46fb2012-08-25 02:00:03 +00003
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.
12void foo();
13void __cdecl foo();
14void __cdecl foo() {}
Stephen Lin43622612013-08-15 06:47:53 +000015// GCABI-LABEL: define void @_Z3foov()
John McCalla5f46fb2012-08-25 02:00:03 +000016// MSABI: define void @"\01?foo@@YAXXZ"
17
18void __cdecl bar();
19void bar();
20void bar() {}
Stephen Lin43622612013-08-15 06:47:53 +000021// GCABI-LABEL: define void @_Z3barv()
John McCalla5f46fb2012-08-25 02:00:03 +000022// 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.
26class A {
27public:
28 void baz();
29 void METHOD_CC qux();
30
Timur Iskhodzhanov2e9bd802013-02-19 10:50:44 +000031 static void static_baz();
32 static void __cdecl static_qux();
John McCalla5f46fb2012-08-25 02:00:03 +000033};
34
35void METHOD_CC A::baz() {}
Stephen Lin43622612013-08-15 06:47:53 +000036// GCABI-LABEL: define void @_ZN1A3bazEv
John McCalla5f46fb2012-08-25 02:00:03 +000037// MSABI: define x86_thiscallcc void @"\01?baz@A@@QAEXXZ"
38void A::qux() {}
Stephen Lin43622612013-08-15 06:47:53 +000039// GCABI-LABEL: define void @_ZN1A3quxEv
John McCalla5f46fb2012-08-25 02:00:03 +000040// MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ"
41
42void __cdecl static_baz() {}
Stephen Lin43622612013-08-15 06:47:53 +000043// GCABI-LABEL: define void @_Z10static_bazv
John McCalla5f46fb2012-08-25 02:00:03 +000044// MSABI: define void @"\01?static_baz@@YAXXZ"
45void static_qux() {}
Stephen Lin43622612013-08-15 06:47:53 +000046// GCABI-LABEL: define void @_Z10static_quxv
John McCalla5f46fb2012-08-25 02:00:03 +000047// MSABI: define void @"\01?static_qux@@YAXXZ"