Skip to content

Commit 0f0039a

Browse files
authored
Merge pull request #59622 from hyp/eng/test-frozen-struct
[interop][SwiftToCxx] NFC, add a test case for emitting @Frozen structs
2 parents 23f5e01 + 455007e commit 0f0039a

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

test/Interop/SwiftToCxx/structs/resilient-struct-in-cxx.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ public struct FirstSmallStruct {
4848
// CHECK-NEXT: return _impl::$s7Structs16FirstSmallStructV4dumpyyF(_getOpaquePointer());
4949
// CHECK-NEXT: }
5050

51+
@frozen public struct FrozenStruct {
52+
private let storedInt: Int32
53+
}
54+
// CHECK: class FrozenStruct final {
55+
// CHECK: alignas(4) char _storage[4];
56+
// CHECK-NEXT: friend class _impl::_impl_FrozenStruct;
57+
// CHECK-NEXT: };
58+
5159
public struct LargeStruct {
5260
public let x1: Int
5361
let x2, x3, x4, x5, x6: Int

test/Interop/SwiftToCxx/structs/small-structs-pass-return-direct-in-cxx.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
// RUN: %check-interop-cxx-header-in-clang(%t/structs.h)
66

7+
// RUN: sed -e 's/^public struct/@frozen public struct/' %s > %t/small-structs-frozen.swift
8+
// RUN: %target-swift-frontend %t/small-structs-frozen.swift -enable-library-evolution -typecheck -module-name Structs -clang-header-expose-public-decls -emit-clang-header-path %t/small-structs-frozen.h -D RESILIENT
9+
// RUN: %FileCheck --check-prefixes=CHECK,RESILIENT %s < %t/small-structs-frozen.h
10+
711
public struct StructOneI64 {
812
let x: Int64
913
}
@@ -36,6 +40,21 @@ public struct StructDoubleAndFloat {
3640

3741
// CHECK: class StructOneI64 final {
3842

43+
#if RESILIENT
44+
/*not frozen*/ public struct StructOneI64_resilient {
45+
let x: Int64
46+
}
47+
48+
public func printStructOneI64_resilient(_ x : StructOneI64_resilient) {
49+
print(x)
50+
}
51+
52+
// RESILIENT: class StructOneI64_resilient final {
53+
// RESILIENT: swift::_impl::OpaqueStorage _storage;
54+
// RESILIENT-NEXT: friend class _impl::_impl_StructOneI64_resilient;
55+
// RESILIENT-NEXT: };
56+
#endif
57+
3958
// CHECK: class StructTwoI32 final {
4059

4160
// CHECK: class StructU16AndPointer final {

0 commit comments

Comments
 (0)