Skip to content

Commit 0591246

Browse files
authored
Merge pull request #59217 from Robertorosmaninho/interop/SwiftToCXXErrorTest
[Interop] [SwiftToCxx] New Throw Error Test
2 parents 8ae4ea1 + c4ca064 commit 0591246

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-swift-frontend %S/swift-functions-errors.swift -typecheck -module-name Functions -clang-header-expose-public-decls -emit-clang-header-path %t/functions.h
4+
5+
// RUN: %target-interop-build-clangxx -c %s -I %t -o %t/swift-functions-errors-execution.o
6+
// RUN: %target-interop-build-swift %S/swift-functions-errors.swift -o %t/swift-functions-errors-execution -Xlinker %t/swift-functions-errors-execution.o -module-name Functions -Xfrontend -entry-point-function-name -Xfrontend swiftMain
7+
8+
// RUN: %target-codesign %t/swift-functions-errors-execution
9+
// RUN: %target-run %t/swift-functions-errors-execution | %FileCheck %s
10+
11+
// REQUIRES: executable_test
12+
// XFAIL: *
13+
14+
#include <cassert>
15+
#include "functions.h"
16+
17+
int main() {
18+
static_assert(!noexcept(Functions::emptyThrowFunction()), "noexcept function");
19+
static_assert(!noexcept(Functions::throwFunction()), "noexcept function");
20+
21+
Functions::emptyThrowFunction();
22+
Functions::throwFunction();
23+
return 0;
24+
}
25+
26+
// CHECK: passEmptyThrowFunction
27+
// CHECK-NEXT: passThrowFunction
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend %s -typecheck -module-name Functions -clang-header-expose-public-decls -emit-clang-header-path %t/functions.h
3+
// RUN: %FileCheck %s < %t/functions.h
4+
5+
// RUN: %check-interop-cxx-header-in-clang(%t/functions.h)
6+
7+
// CHECK-LABEL: namespace Functions {
8+
9+
// CHECK-LABEL: namespace _impl {
10+
11+
// CHECK: SWIFT_EXTERN void $s9Functions18emptyThrowFunctionyyKF(void) SWIFT_CALL; // emptyThrowFunction()
12+
// CHECK: SWIFT_EXTERN void $s9Functions13throwFunctionyyKF(void) SWIFT_CALL; // throwFunction()
13+
14+
// CHECK: }
15+
16+
//XFAIL: *
17+
18+
enum NaiveErrors: Error {
19+
case returnError
20+
case throwError
21+
}
22+
23+
public func emptyThrowFunction() throws { print("passEmptyThrowFunction") }
24+
25+
// CHECK: inline void emptyThrowFunction() {
26+
// CHECK: return _impl::$s9Functions18emptyThrowFunctionyyKF();
27+
// CHECK: }
28+
29+
public func throwFunction() throws {
30+
print("passThrowFunction")
31+
throw NaiveErrors.throwError
32+
}
33+
34+
// CHECK: inline void throwFunction() {
35+
// CHECK: return _impl::$s9Functions13throwFunctionyyKF();
36+
// CHECK: }

0 commit comments

Comments
 (0)