• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -emit-llvm < %s | FileCheck %s
2 
3 void __attribute__((fastcall)) f1(void);
4 void __attribute__((stdcall)) f2(void);
5 void __attribute__((thiscall)) f3(void);
f4(void)6 void __attribute__((fastcall)) f4(void) {
7 // CHECK: define x86_fastcallcc void @f4()
8   f1();
9 // CHECK: call x86_fastcallcc void @f1()
10 }
f5(void)11 void __attribute__((stdcall)) f5(void) {
12 // CHECK: define x86_stdcallcc void @f5()
13   f2();
14 // CHECK: call x86_stdcallcc void @f2()
15 }
f6(void)16 void __attribute__((thiscall)) f6(void) {
17 // CHECK: define x86_thiscallcc void @f6()
18   f3();
19 // CHECK: call x86_thiscallcc void @f3()
20 }
21 
22 // PR5280
23 void (__attribute__((fastcall)) *pf1)(void) = f1;
24 void (__attribute__((stdcall)) *pf2)(void) = f2;
25 void (__attribute__((thiscall)) *pf3)(void) = f3;
26 void (__attribute__((fastcall)) *pf4)(void) = f4;
27 void (__attribute__((stdcall)) *pf5)(void) = f5;
28 void (__attribute__((thiscall)) *pf6)(void) = f6;
29 
main(void)30 int main(void) {
31     f4(); f5(); f6();
32     // CHECK: call x86_fastcallcc void @f4()
33     // CHECK: call x86_stdcallcc void @f5()
34     // CHECK: call x86_thiscallcc void @f6()
35     pf1(); pf2(); pf3(); pf4(); pf5(); pf6();
36     // CHECK: call x86_fastcallcc void %{{.*}}()
37     // CHECK: call x86_stdcallcc void %{{.*}}()
38     // CHECK: call x86_thiscallcc void %{{.*}}()
39     // CHECK: call x86_fastcallcc void %{{.*}}()
40     // CHECK: call x86_stdcallcc void %{{.*}}()
41     // CHECK: call x86_thiscallcc void %{{.*}}()
42     return 0;
43 }
44 
45 // PR7117
46 void __attribute((stdcall)) f7(foo) int foo; {}
f8(void)47 void f8(void) {
48   f7(0);
49   // CHECK: call x86_stdcallcc void (...)* bitcast
50 }
51