9
9
// CHECK-LABEL: namespace _impl {
10
10
11
11
// CHECK: SWIFT_EXTERN void $s9Functions18emptyThrowFunctionyyKF(SWIFT_CONTEXT void * _Nonnull _ctx, SWIFT_ERROR_RESULT void * _Nullable * _Nullable _error) SWIFT_CALL; // emptyThrowFunction()
12
+ // CHECK: SWIFT_EXTERN void $s9Functions18testDestroyedErroryyKF(SWIFT_CONTEXT void * _Nonnull _ctx, SWIFT_ERROR_RESULT void * _Nullable * _Nullable _error) SWIFT_CALL; // testDestroyedError()
12
13
// CHECK: SWIFT_EXTERN void $s9Functions13throwFunctionyyKF(SWIFT_CONTEXT void * _Nonnull _ctx, SWIFT_ERROR_RESULT void * _Nullable * _Nullable _error) SWIFT_CALL; // throwFunction()
14
+ // CHECK: SWIFT_EXTERN ptrdiff_t $s9Functions31throwFunctionWithPossibleReturnyS2iKF(ptrdiff_t a, SWIFT_CONTEXT void * _Nonnull _ctx, SWIFT_ERROR_RESULT void * _Nullable * _Nullable _error) SWIFT_CALL; // throwFunctionWithPossibleReturn(_:)
15
+ // CHECK: SWIFT_EXTERN ptrdiff_t $s9Functions23throwFunctionWithReturnSiyKF(SWIFT_CONTEXT void * _Nonnull _ctx, SWIFT_ERROR_RESULT void * _Nullable * _Nullable _error) SWIFT_CALL; // throwFunctionWithReturn()
16
+
13
17
14
18
// CHECK: }
15
19
@@ -26,12 +30,16 @@ public enum NaiveErrors : Error {
26
30
@_expose ( Cxx)
27
31
public func emptyThrowFunction( ) throws { print ( " passEmptyThrowFunction " ) }
28
32
29
- // CHECK: inline void emptyThrowFunction() {
33
+ // CHECK: inline Swift::ThrowingResult< void> emptyThrowFunction() {
30
34
// CHECK: void* opaqueError = nullptr;
31
35
// CHECK: void* _ctx = nullptr;
32
36
// CHECK: _impl::$s9Functions18emptyThrowFunctionyyKF(_ctx, &opaqueError);
33
37
// CHECK: if (opaqueError != nullptr)
34
- // CHECK: throw (Swift::Error(opaqueError))
38
+ // CHECK: #ifdef __cpp_exceptions
39
+ // CHECK: throw (Swift::Error(opaqueError));
40
+ // CHECK: #else
41
+ // CHECK: return SWIFT_RETURN_THUNK(void, Swift::Error(opaqueError));
42
+ // CHECK: #endif
35
43
// CHECK: }
36
44
37
45
class TestDestroyed {
@@ -48,12 +56,16 @@ public struct DestroyedError : Error {
48
56
@_expose ( Cxx)
49
57
public func testDestroyedError( ) throws { throw DestroyedError ( ) }
50
58
51
- // CHECK: inline void testDestroyedError() {
59
+ // CHECK: inline Swift::ThrowingResult< void> testDestroyedError() {
52
60
// CHECK: void* opaqueError = nullptr;
53
61
// CHECK: void* _ctx = nullptr;
54
62
// CHECK: _impl::$s9Functions18testDestroyedErroryyKF(_ctx, &opaqueError);
55
63
// CHECK: if (opaqueError != nullptr)
56
- // CHECK: throw (Swift::Error(opaqueError))
64
+ // CHECK: #ifdef __cpp_exceptions
65
+ // CHECK: throw (Swift::Error(opaqueError));
66
+ // CHECK: #else
67
+ // CHECK: return SWIFT_RETURN_THUNK(void, Swift::Error(opaqueError));
68
+ // CHECK: #endif
57
69
// CHECK: }
58
70
59
71
@_expose ( Cxx)
@@ -62,12 +74,38 @@ public func throwFunction() throws {
62
74
throw NaiveErrors . throwError
63
75
}
64
76
65
- // CHECK: inline void throwFunction() {
77
+ // CHECK: inline Swift::ThrowingResult< void> throwFunction() {
66
78
// CHECK: void* opaqueError = nullptr;
67
79
// CHECK: void* _ctx = nullptr;
68
80
// CHECK: _impl::$s9Functions13throwFunctionyyKF(_ctx, &opaqueError);
69
81
// CHECK: if (opaqueError != nullptr)
70
- // CHECK: throw (Swift::Error(opaqueError))
82
+ // CHECK: #ifdef __cpp_exceptions
83
+ // CHECK: throw (Swift::Error(opaqueError));
84
+ // CHECK: #else
85
+ // CHECK: return SWIFT_RETURN_THUNK(void, Swift::Error(opaqueError));
86
+ // CHECK: #endif
87
+ // CHECK: }
88
+
89
+ @_expose ( Cxx)
90
+ public func throwFunctionWithPossibleReturn( _ a: Int ) throws -> Int {
91
+ print ( " passThrowFunctionWithPossibleReturn " )
92
+ if ( a == 0 ) {
93
+ throw NaiveErrors . returnError
94
+ }
95
+ return 0
96
+ }
97
+
98
+ // CHECK: inline Swift::ThrowingResult<swift::Int> throwFunctionWithPossibleReturn(swift::Int a) SWIFT_WARN_UNUSED_RESULT {
99
+ // CHECK: void* opaqueError = nullptr;
100
+ // CHECK: void* _ctx = nullptr;
101
+ // CHECK: auto returnValue = _impl::$s9Functions31throwFunctionWithPossibleReturnyS2iKF(a, _ctx, &opaqueError);
102
+ // CHECK: if (opaqueError != nullptr)
103
+ // CHECK: #ifdef __cpp_exceptions
104
+ // CHECK: throw (Swift::Error(opaqueError));
105
+ // CHECK: #else
106
+ // CHECK: return SWIFT_RETURN_THUNK(swift::Int, Swift::Error(opaqueError));
107
+ // CHECK: #endif
108
+ // CHECK: return SWIFT_RETURN_THUNK(swift::Int, returnValue);
71
109
// CHECK: }
72
110
73
111
@_expose ( Cxx)
@@ -77,11 +115,14 @@ public func throwFunctionWithReturn() throws -> Int {
77
115
return 0
78
116
}
79
117
80
- // CHECK: inline swift::Int throwFunctionWithReturn() SWIFT_WARN_UNUSED_RESULT {
118
+ // CHECK: inline Swift::ThrowingResult< swift::Int> throwFunctionWithReturn() SWIFT_WARN_UNUSED_RESULT {
81
119
// CHECK: void* opaqueError = nullptr;
82
120
// CHECK: void* _ctx = nullptr;
83
121
// CHECK: auto returnValue = _impl::$s9Functions23throwFunctionWithReturnSiyKF(_ctx, &opaqueError);
84
- // CHECK: if (opaqueError != nullptr)
85
- // CHECK: throw (Swift::Error(opaqueError))
86
- // CHECK: return returnValue;
122
+ // CHECK: #ifdef __cpp_exceptions
123
+ // CHECK: throw (Swift::Error(opaqueError));
124
+ // CHECK: #else
125
+ // CHECK: return SWIFT_RETURN_THUNK(swift::Int, Swift::Error(opaqueError));
126
+ // CHECK: #endif
127
+ // CHECK: return SWIFT_RETURN_THUNK(swift::Int, returnValue);
87
128
// CHECK: }
0 commit comments