1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -Wno-strict-prototypes -verify %s
2 // RUN: %clang_cc1 -triple x86_64-unknown-windows -fsyntax-only -Wno-strict-prototypes -verify %s
4 #define SWIFTCALL __attribute__((swiftcall))
5 #define SWIFTASYNCCALL __attribute__((swiftasynccall))
6 #define INDIRECT_RESULT __attribute__((swift_indirect_result))
7 #define ERROR_RESULT __attribute__((swift_error_result))
8 #define CONTEXT __attribute__((swift_context))
9 #define ASYNC_CONTEXT __attribute__((swift_async_context))
11 int notAFunction SWIFTCALL
; // expected-warning {{'swiftcall' only applies to function types; type here is 'int'}}
12 int notAnAsyncFunction SWIFTASYNCCALL
; // expected-warning {{'swiftasynccall' only applies to function types; type here is 'int'}}
13 void variadic(int x
, ...) SWIFTCALL
; // expected-error {{variadic function cannot use swiftcall calling convention}}
14 void variadic_async(int x
, ...) SWIFTASYNCCALL
; // expected-error {{variadic function cannot use swiftasynccall calling convention}}
15 void unprototyped() SWIFTCALL
; // expected-error {{function with no prototype cannot use the swiftcall calling convention}}
16 void unprototyped_async() SWIFTASYNCCALL
; // expected-error {{function with no prototype cannot use the swiftasynccall calling convention}}
17 void multiple_ccs(int x
) SWIFTCALL
__attribute__((vectorcall
)); // expected-error {{vectorcall and swiftcall attributes are not compatible}}
18 void multiple_ccs_async(int x
) SWIFTASYNCCALL
__attribute__((vectorcall
)); // expected-error {{vectorcall and swiftasynccall attributes are not compatible}}
19 void (*functionPointer
)(void) SWIFTCALL
;
20 void (*asyncFunctionPointer
)(void) SWIFTASYNCCALL
;
22 void indirect_result_nonswift(INDIRECT_RESULT
void *out
); // expected-error {{'swift_indirect_result' parameter can only be used with swiftcall or swiftasynccall calling convention}}
23 void indirect_result_bad_position(int first
, INDIRECT_RESULT
void *out
) SWIFTCALL
; // expected-error {{'swift_indirect_result' parameters must be first parameters of function}}
24 void indirect_result_bad_type(INDIRECT_RESULT
int out
) SWIFTCALL
; // expected-error {{'swift_indirect_result' parameter must have pointer type; type here is 'int'}}
25 void indirect_result_single(INDIRECT_RESULT
void *out
) SWIFTCALL
;
26 void indirect_result_multiple(INDIRECT_RESULT
void *out1
, INDIRECT_RESULT
void *out2
) SWIFTCALL
;
27 void indirect_result_single_async(INDIRECT_RESULT
void *out
) SWIFTASYNCCALL
;
28 void indirect_result_multiple_async(INDIRECT_RESULT
void *out1
, INDIRECT_RESULT
void *out2
) SWIFTASYNCCALL
;
30 void error_result_nonswift(ERROR_RESULT
void **error
); // expected-error {{'swift_error_result' parameter can only be used with swiftcall calling convention}} expected-error{{'swift_error_result' parameter must follow 'swift_context' parameter}}
31 void error_result_bad_position2(int first
, ERROR_RESULT
void **error
) SWIFTCALL
; // expected-error {{'swift_error_result' parameter must follow 'swift_context' parameter}}
32 void error_result_bad_type(CONTEXT
void *context
, ERROR_RESULT
int error
) SWIFTCALL
; // expected-error {{'swift_error_result' parameter must have pointer to unqualified pointer type; type here is 'int'}}
33 void error_result_bad_type2(CONTEXT
void *context
, ERROR_RESULT
int *error
) SWIFTCALL
; // expected-error {{'swift_error_result' parameter must have pointer to unqualified pointer type; type here is 'int *'}}
34 void error_result_okay(int a
, int b
, CONTEXT
void *context
, ERROR_RESULT
void **error
) SWIFTCALL
;
35 void error_result_okay2(CONTEXT
void *context
, ERROR_RESULT
void **error
, void *selfType
, char **selfWitnessTable
) SWIFTCALL
;
37 void context_nonswift(CONTEXT
void *context
); // expected-error {{'swift_context' parameter can only be used with swiftcall or swiftasynccall calling convention}}
38 void context_bad_type(CONTEXT
int context
) SWIFTCALL
; // expected-error {{'swift_context' parameter must have pointer type; type here is 'int'}}
39 void context_okay(CONTEXT
void *context
) SWIFTCALL
;
40 void context_okay2(CONTEXT
void *context
, void *selfType
, char **selfWitnessTable
) SWIFTCALL
;
41 void context_okay_async(CONTEXT
void *context
) SWIFTASYNCCALL
;
42 void context_okay2_async(CONTEXT
void *context
, void *selfType
, char **selfWitnessTable
) SWIFTASYNCCALL
;
44 void async_context_okay_for_now(ASYNC_CONTEXT
void *context
);
45 void async_context_bad_type(ASYNC_CONTEXT
int context
) SWIFTCALL
; // expected-error {{'swift_async_context' parameter must have pointer type; type here is 'int'}}
46 void async_context_bad_pos(int context
) ASYNC_CONTEXT SWIFTCALL
; // expected-warning {{'swift_async_context' attribute only applies to parameters}}
47 void async_context_bad_args(__attribute__((swift_async_context(1))) void *context
) SWIFTCALL
; // expected-error {{'swift_async_context' attribute takes no arguments}}
48 void async_context_okay(ASYNC_CONTEXT
void *context
) SWIFTCALL
;
49 void async_context_okay2(ASYNC_CONTEXT
void *context
, void *selfType
, char **selfWitnessTable
) SWIFTCALL
;