154db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman// RUN: %clang_cc1 -triple x86_64-pc-win32 -emit-llvm < %s | FileCheck %s
254db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman
354db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid __fastcall f1(void);
454db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid __stdcall f2(void);
554db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid __fastcall f4(void) {
693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f4()
754db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman  f1();
854db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman// CHECK: call void @f1()
954db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman}
1054db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid __stdcall f5(void) {
1193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f5()
1254db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman  f2();
1354db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman// CHECK: call void @f2()
1454db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman}
1554db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman
1654db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman// PR5280
1754db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid (__fastcall *pf1)(void) = f1;
1854db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid (__stdcall *pf2)(void) = f2;
1954db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid (__fastcall *pf4)(void) = f4;
2054db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid (__stdcall *pf5)(void) = f5;
2154db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman
2254db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanint main(void) {
2354db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    f4(); f5();
2454db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void @f4()
2554db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void @f5()
2654db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    pf1(); pf2(); pf4(); pf5();
2754db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void %{{.*}}()
2854db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void %{{.*}}()
2954db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void %{{.*}}()
3054db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    // CHECK: call void %{{.*}}()
3154db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman    return 0;
3254db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman}
3354db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman
3454db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman// PR7117
3554db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid __stdcall f7(foo) int foo; {}
3654db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballmanvoid f8(void) {
3754db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman  f7(0);
3854db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman  // CHECK: call void @f7(i32 0)
3954db3244f425dae51cde7c6298ec42d0764f8ed8Aaron Ballman}
40