| // RUN: %clang_cc1 -triple x86_64-unknown-windows -emit-llvm -target-cpu core2 -o - %s | FileCheck %s |
| |
| #define SWIFTCALL __attribute__((swiftcall)) |
| #define OUT __attribute__((swift_indirect_result)) |
| #define ERROR __attribute__((swift_error_result)) |
| #define CONTEXT __attribute__((swift_context)) |
| |
| /*****************************************************************************/ |
| /****************************** PARAMETER ABIS *******************************/ |
| /*****************************************************************************/ |
| |
| // Swift doesn't use inalloca like windows x86 normally does. |
| struct NonTrivial { |
| NonTrivial(); |
| NonTrivial(const NonTrivial &); |
| int o; |
| }; |
| |
| SWIFTCALL int receiveNonTrivial(NonTrivial o) { return o.o; } |
| |
| // CHECK-LABEL: define dso_local swiftcc i32 @"?receiveNonTrivial@@YSHUNonTrivial@@@Z"(%struct.NonTrivial* %o) |
| |
| int passNonTrivial() { |
| return receiveNonTrivial({}); |
| } |
| |
| // CHECK-LABEL: define dso_local i32 @"?passNonTrivial@@YAHXZ"() |
| // CHECK-NOT: stacksave |
| // CHECK: call swiftcc i32 @"?receiveNonTrivial@@YSHUNonTrivial@@@Z"(%struct.NonTrivial* %{{.*}}) |