// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm < %s | FileCheck %s

void __attribute__((fastcall)) f1(void);
void __attribute__((stdcall)) f2(void);
void __attribute__((thiscall)) f3(void);
void __attribute__((fastcall)) f4(void) {
// CHECK-LABEL: define{{.*}} x86_fastcallcc void @f4()
  f1();
// CHECK: call x86_fastcallcc void @f1()
}
void __attribute__((stdcall)) f5(void) {
// CHECK-LABEL: define{{.*}} x86_stdcallcc void @f5()
  f2();
// CHECK: call x86_stdcallcc void @f2()
}
void __attribute__((thiscall)) f6(void) {
// CHECK-LABEL: define{{.*}} x86_thiscallcc void @f6()
  f3();
// CHECK: call x86_thiscallcc void @f3()
}

// PR5280
void (__attribute__((fastcall)) *pf1)(void) = f1;
void (__attribute__((stdcall)) *pf2)(void) = f2;
void (__attribute__((thiscall)) *pf3)(void) = f3;
void (__attribute__((fastcall)) *pf4)(void) = f4;
void (__attribute__((stdcall)) *pf5)(void) = f5;
void (__attribute__((thiscall)) *pf6)(void) = f6;

int main(void) {
    f4(); f5(); f6();
    // CHECK: call x86_fastcallcc void @f4()
    // CHECK: call x86_stdcallcc void @f5()
    // CHECK: call x86_thiscallcc void @f6()
    pf1(); pf2(); pf3(); pf4(); pf5(); pf6();
    // CHECK: call x86_fastcallcc void %{{.*}}()
    // CHECK: call x86_stdcallcc void %{{.*}}()
    // CHECK: call x86_thiscallcc void %{{.*}}()
    // CHECK: call x86_fastcallcc void %{{.*}}()
    // CHECK: call x86_stdcallcc void %{{.*}}()
    // CHECK: call x86_thiscallcc void %{{.*}}()
    return 0;
}

// PR7117
void __attribute((stdcall)) f7(foo) int foo; {}
void f8(void) {
  f7(0);
  // CHECK: call x86_stdcallcc void @f7(i32 noundef 0)
}

void __attribute__((fastcall)) foo1(int y);
void bar1(int y) {
  // CHECK-LABEL: define{{.*}} void @bar1
  // CHECK: call x86_fastcallcc void @foo1(i32 inreg noundef %
  foo1(y);
}

struct S1 {
  int x;
};
void __attribute__((fastcall)) foo2(struct S1 y);
void bar2(struct S1 y) {
  // CHECK-LABEL: define{{.*}} void @bar2
  // CHECK: call x86_fastcallcc void @foo2(i32 inreg undef, i32 %
  foo2(y);
}

void __attribute__((fastcall)) foo3(int *y);
void bar3(int *y) {
  // CHECK-LABEL: define{{.*}} void @bar3
  // CHECK: call x86_fastcallcc void @foo3(i32* inreg noundef %
  foo3(y);
}

enum Enum {Eval};
void __attribute__((fastcall)) foo4(enum Enum y);
void bar4(enum Enum y) {
  // CHECK-LABEL: define{{.*}} void @bar4
  // CHECK: call x86_fastcallcc void @foo4(i32 inreg noundef %
  foo4(y);
}

struct S2 {
  int x1;
  double x2;
  double x3;
};
void __attribute__((fastcall)) foo5(struct S2 y);
void bar5(struct S2 y) {
  // CHECK-LABEL: define{{.*}} void @bar5
  // CHECK: call x86_fastcallcc void @foo5(%struct.S2* noundef byval(%struct.S2) align 4 %
  foo5(y);
}

void __attribute__((fastcall)) foo6(long long y);
void bar6(long long y) {
  // CHECK-LABEL: define{{.*}} void @bar6
  // CHECK: call x86_fastcallcc void @foo6(i64 noundef %
  foo6(y);
}

void __attribute__((fastcall)) foo7(int a, struct S1 b, int c);
void bar7(int a, struct S1 b, int c) {
  // CHECK-LABEL: define{{.*}} void @bar7
  // CHECK: call x86_fastcallcc void @foo7(i32 inreg noundef %{{.*}}, i32 %{{.*}}, i32 noundef %{{.*}}
  foo7(a, b, c);
}

void __attribute__((fastcall)) foo8(struct S1 a, int b);
void bar8(struct S1 a, int b) {
  // CHECK-LABEL: define{{.*}} void @bar8
  // CHECK: call x86_fastcallcc void @foo8(i32 inreg undef, i32 %{{.*}}, i32 inreg noundef %
  foo8(a, b);
}

void __attribute__((fastcall)) foo9(struct S2 a, int b);
void bar9(struct S2 a, int b) {
  // CHECK-LABEL: define{{.*}} void @bar9
  // CHECK: call x86_fastcallcc void @foo9(%struct.S2* noundef byval(%struct.S2) align 4 %{{.*}}, i32 noundef %
  foo9(a, b);
}

void __attribute__((fastcall)) foo10(float y, int x);
void bar10(float y, int x) {
  // CHECK-LABEL: define{{.*}} void @bar10
  // CHECK: call x86_fastcallcc void @foo10(float noundef %{{.*}}, i32 inreg noundef %
  foo10(y, x);
}

void __attribute__((fastcall)) foo11(double y, int x);
void bar11(double y, int x) {
  // CHECK-LABEL: define{{.*}} void @bar11
  // CHECK: call x86_fastcallcc void @foo11(double noundef %{{.*}}, i32 inreg noundef %
  foo11(y, x);
}

struct S3 {
  float x;
};
void __attribute__((fastcall)) foo12(struct S3 y, int x);
void bar12(struct S3 y, int x) {
  // CHECK-LABEL: define{{.*}} void @bar12
  // CHECK: call x86_fastcallcc void @foo12(float %{{.*}}, i32 inreg noundef %
  foo12(y, x);
}
