Skip to content

Commit c26e6b0

Browse files
committed
Improve test cases and change a FIXME to TODO
1 parent 00598e8 commit c26e6b0

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

lib/PrintAsClang/ModuleContentsWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class ModuleWriter {
240240
}
241241

242242
void forwardDeclare(const EnumDecl *ED) {
243-
// FIXME: (tongjie) do we need this?
243+
// TODO: skip for now; will overhaul the forward decals for c++ in the future
244244
if (outputLangMode == swift::OutputLanguageMode::Cxx) {
245245
return;
246246
}

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,40 @@ public func inoutSmall(_ en: inout Small, _ x: Int) {
6666

6767
// CHECK: SWIFT_EXTERN void $s5Enums10inoutSmallyyAA0C0Oz_SitF(char * _Nonnull en, ptrdiff_t x) SWIFT_NOEXCEPT SWIFT_CALL; // inoutSmall(_:_:)
6868
// CHECK: SWIFT_EXTERN void $s5Enums9inoutTinyyyAA0C0Oz_SitF(char * _Nonnull en, ptrdiff_t x) SWIFT_NOEXCEPT SWIFT_CALL; // inoutTiny(_:_:)
69+
70+
// CHECK: struct swift_interop_stub_Enums_Small {
71+
// CHECK-NEXT: uint64_t _1;
72+
// CHECK-NEXT: uint8_t _2;
73+
// CHECK-NEXT: };
74+
75+
// CHECK: static inline void swift_interop_returnDirect_Enums_Small(char * _Nonnull result, struct swift_interop_stub_Enums_Small value) __attribute__((always_inline)) {
76+
// CHECK-NEXT: memcpy(result + 0, &value._1, 8);
77+
// CHECK-NEXT: memcpy(result + 8, &value._2, 1);
78+
// CHECK-NEXT: }
79+
80+
// CHECK: static inline struct swift_interop_stub_Enums_Small swift_interop_passDirect_Enums_Small(const char * _Nonnull value) __attribute__((always_inline)) {
81+
// CHECK-NEXT: struct swift_interop_stub_Enums_Small result;
82+
// CHECK-NEXT: memcpy(&result._1, value + 0, 8);
83+
// CHECK-NEXT: memcpy(&result._2, value + 8, 1);
84+
// CHECK-NEXT: return result;
85+
// CHECK-NEXT: }
86+
6987
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Enums_Small $s5Enums9makeSmallyAA0C0OSiF(ptrdiff_t x) SWIFT_NOEXCEPT SWIFT_CALL; // makeSmall(_:)
88+
89+
// CHECK: struct swift_interop_stub_Enums_Tiny {
90+
// CHECK-NEXT: uint8_t _1;
91+
// CHECK-NEXT: };
92+
93+
// CHECK: static inline void swift_interop_returnDirect_Enums_Tiny(char * _Nonnull result, struct swift_interop_stub_Enums_Tiny value) __attribute__((always_inline)) {
94+
// CHECK-NEXT: memcpy(result + 0, &value._1, 1);
95+
// CHECK-NEXT: }
96+
97+
// CHECK: static inline struct swift_interop_stub_Enums_Tiny swift_interop_passDirect_Enums_Tiny(const char * _Nonnull value) __attribute__((always_inline)) {
98+
// CHECK-NEXT: struct swift_interop_stub_Enums_Tiny result;
99+
// CHECK-NEXT: memcpy(&result._1, value + 0, 1);
100+
// CHECK-NEXT: return result;
101+
// CHECK-NEXT: }
102+
70103
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Enums_Tiny $s5Enums8makeTinyyAA0C0OSiF(ptrdiff_t x) SWIFT_NOEXCEPT SWIFT_CALL; // makeTiny(_:)
71104
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Enums_Small $s5Enums16passThroughSmallyAA0D0OADF(struct swift_interop_stub_Enums_Small en) SWIFT_NOEXCEPT SWIFT_CALL; // passThroughSmall(_:)
72105
// CHECK: SWIFT_EXTERN struct swift_interop_stub_Enums_Tiny $s5Enums15passThroughTinyyAA0D0OADF(struct swift_interop_stub_Enums_Tiny en) SWIFT_NOEXCEPT SWIFT_CALL; // passThroughTiny(_:)

0 commit comments

Comments
 (0)