Skip to content

Commit 702713f

Browse files
committed
[interop][SwiftToCxx] NFC, add test to cover cross-module enum refs
1 parent ea9276f commit 702713f

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Large enum passed indirectly.
2+
public enum LargeEnum {
3+
case A(x1: Int64, x2: Int64, x3: Int64, x4: Int64, x5: Int64)
4+
case B
5+
}
6+
7+
public func passThroughLargeEnum(_ x: LargeEnum) -> LargeEnum {
8+
return x
9+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend %S/Inputs/enums.swift -module-name Enums -emit-module -emit-module-path %t/Enums.swiftmodule -clang-header-expose-public-decls -emit-clang-header-path %t/enums.h
3+
4+
// RUN: %target-swift-frontend %s -typecheck -module-name UsesEnums -I %t -clang-header-expose-public-decls -emit-clang-header-path %t/uses-enums.h
5+
6+
// FIXME: add import automatically?
7+
// RUN: echo '#include "enums.h"' > %t/fixed-uses-enums.h
8+
// RUN: cat %t/uses-enums.h >> %t/fixed-uses-enums.h
9+
10+
// RUN: %FileCheck %s < %t/uses-enums.h
11+
12+
// RUN: %check-interop-cxx-header-in-clang(%t/fixed-uses-enums.h)
13+
14+
import Enums
15+
16+
public struct UsesEnumsLargeEnum {
17+
public func passThroughStructSeveralI64(_ y: LargeEnum) -> LargeEnum {
18+
return y
19+
}
20+
21+
public let x: LargeEnum
22+
}
23+
24+
// CHECK: inline Enums::LargeEnum UsesEnumsLargeEnum::passThroughStructSeveralI64(const Enums::LargeEnum& y) const {
25+
// CHECK-NEXT: return Enums::_impl::_impl_LargeEnum::returnNewValue([&](void * _Nonnull result) {
26+
// CHECK-NEXT: _impl::$s9UsesEnums0aB9LargeEnumV27passThroughStructSeveralI64y0B00cD0OAGF(result, Enums::_impl::_impl_LargeEnum::getOpaquePointer(y), _getOpaquePointer());
27+
// CHECK-NEXT: });
28+
// CHECK-NEXT: }
29+
// CHECK-NEXT: inline Enums::LargeEnum UsesEnumsLargeEnum::getX() const {
30+
// CHECK-NEXT: return Enums::_impl::_impl_LargeEnum::returnNewValue([&](void * _Nonnull result) {
31+
// CHECK-NEXT: _impl::$s9UsesEnums0aB9LargeEnumV1x0B00cD0Ovg(result, _getOpaquePointer());
32+
// CHECK-NEXT: });
33+
// CHECK-NEXT: }
34+
35+
36+
public func inoutLargeEnum(_ s: inout LargeEnum) {
37+
return s = LargeEnum.B
38+
}
39+
40+
// CHECK: inline void inoutLargeEnum(Enums::LargeEnum& s) noexcept {
41+
// CHECK-NEXT: return _impl::$s9UsesEnums14inoutLargeEnumyy0B00dE0OzF(Enums::_impl::_impl_LargeEnum::getOpaquePointer(s));
42+
// CHECK-NEXT: }

0 commit comments

Comments
 (0)