Skip to content

Commit 550de96

Browse files
committed
split the failing test to 64 bit only test file and unified file
1 parent c7265f3 commit 550de96

File tree

3 files changed

+127
-118
lines changed

3 files changed

+127
-118
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend %s -typecheck -module-name Structs -clang-header-expose-public-decls -emit-clang-header-path %t/structs.h
3+
// RUN: %FileCheck %s < %t/structs.h
4+
5+
// RUN: %check-interop-c-header-in-clang(%t/structs.h -Wno-unused-function)
6+
7+
// REQUIRES: PTRSIZE=64
8+
9+
public struct StructTwoI32 {
10+
let x, y: Int32
11+
}
12+
13+
public struct StructOneI16AndOneStruct {
14+
let x: Int16
15+
let y: StructTwoI32
16+
}
17+
18+
public struct StructI8AndU32AndI16 {
19+
let x: Int8
20+
let y: UInt32
21+
let z: Int16
22+
}
23+
24+
// CHECK: struct Structs_StructI8AndU32AndI16 {
25+
// CHECK_NEXT: _Alignas(4) char _storage[10];
26+
// CHECK_NEXT: };
27+
28+
// CHECK: struct Structs_StructOneI16AndOneStruct {
29+
// CHECK_NEXT: _Alignas(4) char _storage[12];
30+
// CHECK_NEXT: };
31+
32+
// CHECK: struct Structs_StructTwoI32 {
33+
// CHECK_NEXT: _Alignas(4) char _storage[8];
34+
// CHECK_NEXT: };
35+
36+
public func returnNewStructTwoI32(_ x: Int32) -> StructTwoI32 { return StructTwoI32(x: x, y: x * 2) }
37+
38+
public func passThroughStructTwoI32(_ i: Int32, _ x: StructTwoI32, _ j: Int32) -> StructTwoI32 {
39+
return StructTwoI32(x: x.x + i, y: x.y + j)
40+
}
41+
42+
public func printStructTwoI32(_ x: StructTwoI32) {
43+
print("StructTwoI32.x = \(x.x), y = \(x.y)")
44+
}
45+
46+
public func returnNewStructOneI16AndOneStruct() -> StructOneI16AndOneStruct {
47+
return StructOneI16AndOneStruct(x: 0xFF, y: StructTwoI32(x: 5, y: 72))
48+
}
49+
50+
public func printStructStructTwoI32_and_OneI16AndOneStruct(_ y: StructTwoI32, _ x: StructOneI16AndOneStruct) {
51+
printStructTwoI32(y)
52+
print("StructOneI16AndOneStruct.x = \(x.x), y.x = \(x.y.x), y.y = \(x.y.y)")
53+
}
54+
55+
public func returnNewStructI8AndU32AndI16() -> StructI8AndU32AndI16 {
56+
return StructI8AndU32AndI16(x: -100, y: 123456, z: -3456)
57+
}
58+
59+
public func printStructI8AndU32AndI16(_ x: StructI8AndU32AndI16) {
60+
print("StructI8AndU32AndI16.x = \(x.x), y = \(x.y), z = \(x.z)")
61+
}
62+
63+
// CHECK: struct swift_interop_stub_Structs_StructTwoI32 {
64+
// CHECK-NEXT: uint64_t _1;
65+
// CHECK-NEXT: };
66+
67+
// CHECK: static inline void swift_interop_returnDirect_Structs_StructTwoI32(char * _Nonnull result, struct swift_interop_stub_Structs_StructTwoI32 value) __attribute__((always_inline)) {
68+
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
69+
// CHECK-NEXT: }
70+
71+
// CHECK: static inline struct swift_interop_stub_Structs_StructTwoI32 swift_interop_passDirect_Structs_StructTwoI32(const char * _Nonnull value) __attribute__((always_inline)) {
72+
// CHECK-NEXT: struct swift_interop_stub_Structs_StructTwoI32 result;
73+
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
74+
// CHECK-NEXT: return result;
75+
// CHECK-NEXT: }
76+
77+
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructTwoI32 $s7Structs23passThroughStructTwoI32yAA0deF0Vs5Int32V_AdFtF(int32_t i, struct swift_interop_stub_Structs_StructTwoI32 x, int32_t j) SWIFT_NOEXCEPT SWIFT_CALL;
78+
79+
// CHECK: struct swift_interop_stub_Structs_StructI8AndU32AndI16 {
80+
// CHECK-NEXT: uint64_t _1;
81+
// CHECK-NEXT: uint16_t _2;
82+
// CHECK-NEXT: };
83+
84+
// CHECK: static inline void swift_interop_returnDirect_Structs_StructI8AndU32AndI16(char * _Nonnull result, struct swift_interop_stub_Structs_StructI8AndU32AndI16 value) __attribute__((always_inline)) {
85+
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
86+
// CHECK-NEXT: memcpy(result + 8, &value._2, 2);
87+
// CHECK-NEXT: }
88+
89+
// CHECK: static inline struct swift_interop_stub_Structs_StructI8AndU32AndI16 swift_interop_passDirect_Structs_StructI8AndU32AndI16(const char * _Nonnull value) __attribute__((always_inline)) {
90+
// CHECK-NEXT: struct swift_interop_stub_Structs_StructI8AndU32AndI16 result;
91+
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
92+
// CHECK-NEXT: memcpy(&result._2, value + 8, 2);
93+
// CHECK-NEXT: return result;
94+
// CHECK-NEXT: }
95+
96+
// CHECK: SWIFT_EXTERN void $s7Structs019printStructI8AndU32E3I16yyAA0cdefeG0VF(struct swift_interop_stub_Structs_StructI8AndU32AndI16 x) SWIFT_NOEXCEPT SWIFT_CALL;
97+
98+
// CHECK: struct swift_interop_stub_Structs_StructOneI16AndOneStruct {
99+
// CHECK-NEXT: uint64_t _1;
100+
// CHECK-NEXT: uint32_t _2;
101+
// CHECK-NEXT: };
102+
103+
// CHECK: static inline void swift_interop_returnDirect_Structs_StructOneI16AndOneStruct(char * _Nonnull result, struct swift_interop_stub_Structs_StructOneI16AndOneStruct value) __attribute__((always_inline)) {
104+
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
105+
// CHECK-NEXT: memcpy(result + 8, &value._2, 4);
106+
// CHECK-NEXT: }
107+
108+
// CHECK: static inline struct swift_interop_stub_Structs_StructOneI16AndOneStruct swift_interop_passDirect_Structs_StructOneI16AndOneStruct(const char * _Nonnull value) __attribute__((always_inline)) {
109+
// CHECK-NEXT: struct swift_interop_stub_Structs_StructOneI16AndOneStruct result;
110+
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
111+
// CHECK-NEXT: memcpy(&result._2, value + 8, 4);
112+
// CHECK-NEXT: return result;
113+
// CHECK-NEXT: }
114+
115+
// CHECK: SWIFT_EXTERN void $s7Structs011printStructc20TwoI32_and_OneI16AndgC0yyAA0cdE0V_AA0cghigC0VtF(struct swift_interop_stub_Structs_StructTwoI32 y, struct swift_interop_stub_Structs_StructOneI16AndOneStruct x) SWIFT_NOEXCEPT SWIFT_CALL;
116+
117+
// CHECK: SWIFT_EXTERN void $s7Structs17printStructTwoI32yyAA0cdE0VF(struct swift_interop_stub_Structs_StructTwoI32 x) SWIFT_NOEXCEPT SWIFT_CALL;
118+
119+
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructI8AndU32AndI16 $s7Structs023returnNewStructI8AndU32F3I16AA0defgfH0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;
120+
121+
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructOneI16AndOneStruct $s7Structs024returnNewStructOneI16AndeD0AA0defgeD0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;
122+
123+
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructTwoI32 $s7Structs21returnNewStructTwoI32yAA0deF0Vs5Int32VF(int32_t x) SWIFT_NOEXCEPT SWIFT_CALL;

test/Interop/SwiftToC/structs/small-structs-pass-return-direct-in-c-execution.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// RUN: %empty-directory(%t)
22

3-
// RUN: %target-swift-frontend %S/small-structs-pass-return-direct-in-c.swift -typecheck -module-name Structs -clang-header-expose-public-decls -emit-clang-header-path %t/structs.h
3+
// RUN: cat %S/small-structs-pass-return-direct-in-c.swift %S/small-structs-64-bit-pass-return-direct-in-c.swift > %t/full-small-structs-pass-return-direct-in-c.swift
4+
5+
// RUN: %target-swift-frontend %t/full-small-structs-pass-return-direct-in-c.swift -typecheck -module-name Structs -clang-header-expose-public-decls -emit-clang-header-path %t/structs.h
46

57
// RUN: %target-interop-build-clang -c %s -I %t -o %t/swift-structs-execution.o -Wno-incompatible-pointer-types
6-
// RUN: %target-interop-build-swift %S/small-structs-pass-return-direct-in-c.swift -o %t/swift-structs-execution -Xlinker %t/swift-structs-execution.o -module-name Structs -Xfrontend -entry-point-function-name -Xfrontend swiftMain
8+
// RUN: %target-interop-build-swift %t/full-small-structs-pass-return-direct-in-c.swift -o %t/swift-structs-execution -Xlinker %t/swift-structs-execution.o -module-name Structs -Xfrontend -entry-point-function-name -Xfrontend swiftMain
79

810
// RUN: %target-codesign %t/swift-structs-execution
911
// RUN: %target-run %t/swift-structs-execution | %FileCheck %s

test/Interop/SwiftToC/structs/small-structs-pass-return-direct-in-c.swift

Lines changed: 0 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,6 @@ public struct StructOneI64 {
88
let x: Int64
99
}
1010

11-
public struct StructTwoI32 {
12-
let x, y: Int32
13-
}
14-
15-
public struct StructOneI16AndOneStruct {
16-
let x: Int16
17-
let y: StructTwoI32
18-
}
19-
2011
public struct StructU16AndPointer {
2112
let x: UInt8
2213
let y: UnsafeMutableRawPointer
@@ -27,32 +18,14 @@ public struct StructDoubleAndFloat {
2718
let y: Float
2819
}
2920

30-
public struct StructI8AndU32AndI16 {
31-
let x: Int8
32-
let y: UInt32
33-
let z: Int16
34-
}
35-
3621
// CHECK: struct Structs_StructDoubleAndFloat {
3722
// CHECK_NEXT: _Alignas(8) char _storage[12];
3823
// CHECK_NEXT: };
3924

40-
// CHECK: struct Structs_StructI8AndU32AndI16 {
41-
// CHECK_NEXT: _Alignas(4) char _storage[10];
42-
// CHECK_NEXT: };
43-
44-
// CHECK: struct Structs_StructOneI16AndOneStruct {
45-
// CHECK_NEXT: _Alignas(4) char _storage[12];
46-
// CHECK_NEXT: };
47-
4825
// CHECK: struct Structs_StructOneI64 {
4926
// CHECK_NEXT: _Alignas(8) char _storage[8];
5027
// CHECK_NEXT: };
5128

52-
// CHECK: struct Structs_StructTwoI32 {
53-
// CHECK_NEXT: _Alignas(4) char _storage[8];
54-
// CHECK_NEXT: };
55-
5629
// CHECK: struct Structs_StructU16AndPointer {
5730
// CHECK_NEXT: _Alignas(8) char _storage[16];
5831
// CHECK_NEXT: };
@@ -65,25 +38,6 @@ public func printStructOneI64(_ x: StructOneI64) {
6538
print("StructOneI64.x = \(x.x)")
6639
}
6740

68-
public func returnNewStructTwoI32(_ x: Int32) -> StructTwoI32 { return StructTwoI32(x: x, y: x * 2) }
69-
70-
public func passThroughStructTwoI32(_ i: Int32, _ x: StructTwoI32, _ j: Int32) -> StructTwoI32 {
71-
return StructTwoI32(x: x.x + i, y: x.y + j)
72-
}
73-
74-
public func printStructTwoI32(_ x: StructTwoI32) {
75-
print("StructTwoI32.x = \(x.x), y = \(x.y)")
76-
}
77-
78-
public func returnNewStructOneI16AndOneStruct() -> StructOneI16AndOneStruct {
79-
return StructOneI16AndOneStruct(x: 0xFF, y: StructTwoI32(x: 5, y: 72))
80-
}
81-
82-
public func printStructStructTwoI32_and_OneI16AndOneStruct(_ y: StructTwoI32, _ x: StructOneI16AndOneStruct) {
83-
printStructTwoI32(y)
84-
print("StructOneI16AndOneStruct.x = \(x.x), y.x = \(x.y.x), y.y = \(x.y.y)")
85-
}
86-
8741
public func returnNewStructU16AndPointer(_ x: UnsafeMutableRawPointer) -> StructU16AndPointer {
8842
return StructU16AndPointer(x: 55, y: x)
8943
}
@@ -100,14 +54,6 @@ public func getStructDoubleAndFloat_x(_ x: StructDoubleAndFloat) -> Double { ret
10054

10155
public func getStructDoubleAndFloat_y(_ x: StructDoubleAndFloat) -> Float { return x.y }
10256

103-
public func returnNewStructI8AndU32AndI16() -> StructI8AndU32AndI16 {
104-
return StructI8AndU32AndI16(x: -100, y: 123456, z: -3456)
105-
}
106-
107-
public func printStructI8AndU32AndI16(_ x: StructI8AndU32AndI16) {
108-
print("StructI8AndU32AndI16.x = \(x.x), y = \(x.y), z = \(x.z)")
109-
}
110-
11157
// CHECK: struct swift_interop_stub_Structs_StructDoubleAndFloat {
11258
// CHECK-NEXT: double _1;
11359
// CHECK-NEXT: float _2;
@@ -166,72 +112,10 @@ public func printStructI8AndU32AndI16(_ x: StructI8AndU32AndI16) {
166112

167113
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructOneI64 $s7Structs23passThroughStructOneI64yAA0deF0VADF(struct swift_interop_stub_Structs_StructOneI64 x) SWIFT_NOEXCEPT SWIFT_CALL;
168114

169-
// CHECK: struct swift_interop_stub_Structs_StructTwoI32 {
170-
// CHECK-NEXT: uint64_t _1;
171-
// CHECK-NEXT: };
172-
173-
// CHECK: static inline void swift_interop_returnDirect_Structs_StructTwoI32(char * _Nonnull result, struct swift_interop_stub_Structs_StructTwoI32 value) __attribute__((always_inline)) {
174-
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
175-
// CHECK-NEXT: }
176-
177-
// CHECK: static inline struct swift_interop_stub_Structs_StructTwoI32 swift_interop_passDirect_Structs_StructTwoI32(const char * _Nonnull value) __attribute__((always_inline)) {
178-
// CHECK-NEXT: struct swift_interop_stub_Structs_StructTwoI32 result;
179-
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
180-
// CHECK-NEXT: return result;
181-
// CHECK-NEXT: }
182-
183-
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructTwoI32 $s7Structs23passThroughStructTwoI32yAA0deF0Vs5Int32V_AdFtF(int32_t i, struct swift_interop_stub_Structs_StructTwoI32 x, int32_t j) SWIFT_NOEXCEPT SWIFT_CALL;
184-
185-
// CHECK: struct swift_interop_stub_Structs_StructI8AndU32AndI16 {
186-
// CHECK-NEXT: uint64_t _1;
187-
// CHECK-NEXT: uint16_t _2;
188-
// CHECK-NEXT: };
189-
190-
// CHECK: static inline void swift_interop_returnDirect_Structs_StructI8AndU32AndI16(char * _Nonnull result, struct swift_interop_stub_Structs_StructI8AndU32AndI16 value) __attribute__((always_inline)) {
191-
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
192-
// CHECK-NEXT: memcpy(result + 8, &value._2, 2);
193-
// CHECK-NEXT: }
194-
195-
// CHECK: static inline struct swift_interop_stub_Structs_StructI8AndU32AndI16 swift_interop_passDirect_Structs_StructI8AndU32AndI16(const char * _Nonnull value) __attribute__((always_inline)) {
196-
// CHECK-NEXT: struct swift_interop_stub_Structs_StructI8AndU32AndI16 result;
197-
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
198-
// CHECK-NEXT: memcpy(&result._2, value + 8, 2);
199-
// CHECK-NEXT: return result;
200-
// CHECK-NEXT: }
201-
202-
// CHECK: SWIFT_EXTERN void $s7Structs019printStructI8AndU32E3I16yyAA0cdefeG0VF(struct swift_interop_stub_Structs_StructI8AndU32AndI16 x) SWIFT_NOEXCEPT SWIFT_CALL;
203-
204115
// CHECK: SWIFT_EXTERN void $s7Structs17printStructOneI64yyAA0cdE0VF(struct swift_interop_stub_Structs_StructOneI64 x) SWIFT_NOEXCEPT SWIFT_CALL;
205116

206-
// CHECK: struct swift_interop_stub_Structs_StructOneI16AndOneStruct {
207-
// CHECK-NEXT: uint64_t _1;
208-
// CHECK-NEXT: uint32_t _2;
209-
// CHECK-NEXT: };
210-
211-
// CHECK: static inline void swift_interop_returnDirect_Structs_StructOneI16AndOneStruct(char * _Nonnull result, struct swift_interop_stub_Structs_StructOneI16AndOneStruct value) __attribute__((always_inline)) {
212-
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
213-
// CHECK-NEXT: memcpy(result + 8, &value._2, 4);
214-
// CHECK-NEXT: }
215-
216-
// CHECK: static inline struct swift_interop_stub_Structs_StructOneI16AndOneStruct swift_interop_passDirect_Structs_StructOneI16AndOneStruct(const char * _Nonnull value) __attribute__((always_inline)) {
217-
// CHECK-NEXT: struct swift_interop_stub_Structs_StructOneI16AndOneStruct result;
218-
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
219-
// CHECK-NEXT: memcpy(&result._2, value + 8, 4);
220-
// CHECK-NEXT: return result;
221-
// CHECK-NEXT: }
222-
223-
// CHECK: SWIFT_EXTERN void $s7Structs011printStructc20TwoI32_and_OneI16AndgC0yyAA0cdE0V_AA0cghigC0VtF(struct swift_interop_stub_Structs_StructTwoI32 y, struct swift_interop_stub_Structs_StructOneI16AndOneStruct x) SWIFT_NOEXCEPT SWIFT_CALL;
224-
225-
// CHECK: SWIFT_EXTERN void $s7Structs17printStructTwoI32yyAA0cdE0VF(struct swift_interop_stub_Structs_StructTwoI32 x) SWIFT_NOEXCEPT SWIFT_CALL;
226-
227117
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructDoubleAndFloat $s7Structs29returnNewStructDoubleAndFloatyAA0defG0VSf_SdtF(float y, double x) SWIFT_NOEXCEPT SWIFT_CALL;
228118

229-
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructI8AndU32AndI16 $s7Structs023returnNewStructI8AndU32F3I16AA0defgfH0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;
230-
231-
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructOneI16AndOneStruct $s7Structs024returnNewStructOneI16AndeD0AA0defgeD0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;
232-
233119
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructOneI64 $s7Structs21returnNewStructOneI64AA0deF0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;
234120

235-
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructTwoI32 $s7Structs21returnNewStructTwoI32yAA0deF0Vs5Int32VF(int32_t x) SWIFT_NOEXCEPT SWIFT_CALL;
236-
237121
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Structs_StructU16AndPointer $s7Structs28returnNewStructU16AndPointeryAA0defG0VSvF(void * _Nonnull x) SWIFT_NOEXCEPT SWIFT_CALL;

0 commit comments

Comments
 (0)