Skip to content

Commit 09f5c7b

Browse files
committed
Revert "'Fix' CxxToSwiftToCxx tests."
This reverts commit ac64f91.
1 parent ac64f91 commit 09f5c7b

File tree

2 files changed

+99
-61
lines changed

2 files changed

+99
-61
lines changed

test/Interop/CxxToSwiftToCxx/bridge-cxx-struct-back-to-cxx-execution.cpp

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// RUN: %empty-directory(%t)
22
// RUN: split-file %s %t
33

4-
// RUN: %target-swift-frontend -parse-as-library %platform-module-dir/Swift.swiftmodule/%module-target-triple.swiftinterface -enable-library-evolution -disable-objc-attr-requires-foundation-module -typecheck -module-name Swift -parse-stdlib -enable-experimental-cxx-interop -emit-clang-header-path %t/Swift.h -experimental-skip-all-function-bodies -disable-availability-checking
4+
// RUN: %target-swift-frontend -parse-as-library %platform-module-dir/Swift.swiftmodule/%module-target-triple.swiftinterface -enable-library-evolution -disable-objc-attr-requires-foundation-module -typecheck -module-name Swift -parse-stdlib -enable-experimental-cxx-interop -emit-clang-header-path %t/Swift.h -experimental-skip-all-function-bodies
55

6-
// RUN: %target-swift-frontend -typecheck %t/use-cxx-types.swift -typecheck -module-name UseCxx -emit-clang-header-path %t/UseCxx.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=all-public -disable-availability-checking
6+
// RUN: %target-swift-frontend -typecheck %t/use-cxx-types.swift -typecheck -module-name UseCxx -emit-clang-header-path %t/UseCxx.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=all-public
77

88
// RUN: %target-interop-build-clangxx -std=c++20 -c %t/use-swift-cxx-types.cpp -I %t -o %t/swift-cxx-execution.o -g
99
// RUN: %target-interop-build-swift %t/use-cxx-types.swift -o %t/swift-cxx-execution -Xlinker %t/swift-cxx-execution.o -module-name UseCxx -Xfrontend -entry-point-function-name -Xfrontend swiftMain -I %t -g
@@ -41,8 +41,6 @@ struct NonTrivialTemplate {
4141
}
4242
};
4343

44-
using NonTrivialTemplateTrivial = NonTrivialTemplate<Trivial>;
45-
4644
//--- module.modulemap
4745
module CxxTest {
4846
header "header.h"
@@ -52,19 +50,19 @@ module CxxTest {
5250
//--- use-cxx-types.swift
5351
import CxxTest
5452

55-
public func retNonTrivial(y: CInt) -> NonTrivialTemplateTrivial {
56-
return NonTrivialTemplateTrivial(Trivial(42, y))
53+
public func retNonTrivial(y: CInt) -> NonTrivialTemplate<Trivial> {
54+
return NonTrivialTemplate<Trivial>(Trivial(42, y))
5755
}
5856

59-
public func takeNonTrivial(_ x: NonTrivialTemplateTrivial) {
57+
public func takeNonTrivial(_ x: NonTrivialTemplate<Trivial>) {
6058
print(x)
6159
}
6260

63-
public func passThroughNonTrivial(_ x: NonTrivialTemplateTrivial) -> NonTrivialTemplateTrivial {
61+
public func passThroughNonTrivial(_ x: NonTrivialTemplate<Trivial>) -> NonTrivialTemplate<Trivial>{
6462
return x
6563
}
6664

67-
public func inoutNonTrivial(_ x: inout NonTrivialTemplateTrivial) {
65+
public func inoutNonTrivial(_ x: inout NonTrivialTemplate<Trivial>) {
6866
x.x.y *= 2
6967
}
7068

@@ -84,7 +82,6 @@ public func inoutTrivial(_ x: inout Trivial) {
8482
x.x = x.y + x.x - 11
8583
}
8684

87-
8885
public func takeGeneric<T>(_ x: T) {
8986
print("GENERIC", x)
9087
}
@@ -93,10 +90,9 @@ public func retPassThroughGeneric<T>(_ x: T) -> T {
9390
return x
9491
}
9592

96-
// This is not working.
97-
// public func retArrayNonTrivial(_ x: CInt) -> [NonTrivialTemplateTrivial] {
98-
// return [NonTrivialTemplateTrivial(Trivial(x, -x))]
99-
// }
93+
public func retArrayNonTrivial(_ x: CInt) -> [NonTrivialTemplate<Trivial>] {
94+
return [NonTrivialTemplate<Trivial>(Trivial(x, -x))]
95+
}
10096

10197
//--- use-swift-cxx-types.cpp
10298

@@ -117,15 +113,15 @@ int main() {
117113
assert(x.x == -11);
118114
assert(x.y == -423421);
119115
UseCxx::takeTrivial(x);
120-
// UseCxx::takeGeneric(x);
121-
// auto xPrime = UseCxx::retPassThroughGeneric(x);
122-
assert(x.x == -11);
123-
assert(x.y == -423421);
124-
UseCxx::takeTrivial(x);
116+
UseCxx::takeGeneric(x);
117+
auto xPrime = UseCxx::retPassThroughGeneric(x);
118+
assert(xPrime.x == -11);
119+
assert(xPrime.y == -423421);
120+
UseCxx::takeTrivial(xPrime);
125121
}
126122
// CHECK: Trivial(x: 423421, y: -423421)
127123
// CHECK-NEXT: Trivial(x: -11, y: -423421)
128-
// X-CHECK-NEXT: GENERIC Trivial(x: -11, y: -423421)
124+
// CHECK-NEXT: GENERIC Trivial(x: -11, y: -423421)
129125
// CHECK-NEXT: Trivial(x: -11, y: -423421)
130126
{
131127
auto x = UseCxx::retNonTrivial(-942);
@@ -136,12 +132,12 @@ int main() {
136132
UseCxx::inoutNonTrivial(x);
137133
assert(x.x.y == -1884);
138134
assert(x.x.x == 42);
139-
// UseCxx::takeGeneric(x);
135+
UseCxx::takeGeneric(x);
140136
{
141-
// auto xPrime = UseCxx::retPassThroughGeneric(x);
142-
// assert(x.x.y == -1884);
143-
// assert(x.x.x == 42);
144-
// UseCxx::takeNonTrivial(x);
137+
auto xPrime = UseCxx::retPassThroughGeneric(x);
138+
assert(xPrime.x.y == -1884);
139+
assert(xPrime.x.x == 42);
140+
UseCxx::takeNonTrivial(xPrime);
145141
}
146142
puts("secondon non trivial");
147143
}
@@ -156,32 +152,30 @@ int main() {
156152
// CHECK-NEXT: ~NonTrivialTemplate
157153
// CHECK-NEXT: ~NonTrivialTemplate
158154
// CHECK-NEXT: done non trivial
159-
// X-CHECK-NEXT: copy NonTrivialTemplate
160-
// X-CHECK-NEXT: GENERIC __CxxTemplateInst18NonTrivialTemplateI7TrivialE(x: __C.Trivial(x: 42, y: -1884))
161-
// X-CHECK-NEXT: ~NonTrivialTemplate
162-
// X-CHECK-NEXT: copy NonTrivialTemplate
163-
// X-CHECK-NEXT: move NonTrivialTemplate
164-
// X-CHECK-NEXT: ~NonTrivialTemplate
165-
// X-CHECK-NEXT: copy NonTrivialTemplate
166-
// X-CHECK-NEXT: __CxxTemplateInst18NonTrivialTemplateI7TrivialE(x: __C.Trivial(x: 42, y: -1884))
167-
// X-CHECK-NEXT: ~NonTrivialTemplate
168-
// X-CHECK-NEXT: ~NonTrivialTemplate
155+
// CHECK-NEXT: copy NonTrivialTemplate
156+
// CHECK-NEXT: GENERIC __CxxTemplateInst18NonTrivialTemplateI7TrivialE(x: __C.Trivial(x: 42, y: -1884))
157+
// CHECK-NEXT: ~NonTrivialTemplate
158+
// CHECK-NEXT: copy NonTrivialTemplate
159+
// CHECK-NEXT: move NonTrivialTemplate
160+
// CHECK-NEXT: ~NonTrivialTemplate
161+
// CHECK-NEXT: copy NonTrivialTemplate
162+
// CHECK-NEXT: __CxxTemplateInst18NonTrivialTemplateI7TrivialE(x: __C.Trivial(x: 42, y: -1884))
163+
// CHECK-NEXT: ~NonTrivialTemplate
164+
// CHECK-NEXT: ~NonTrivialTemplate
169165
// CHECK-NEXT: secondon non trivial
170166
// CHECK-NEXT: ~NonTrivialTemplate
171-
172-
// Also not working
173-
// {
174-
// auto arr = UseCxx::retArrayNonTrivial(1234);
175-
// auto val = arr[0];
176-
// assert(val.x.x == 1234);
177-
// assert(val.x.y == -1234);
178-
// }
179-
// X-CHECK-NEXT: create NonTrivialTemplate
180-
// X-CHECK-NEXT: copy NonTrivialTemplate
181-
// X-CHECK-NEXT: move NonTrivialTemplate
182-
// X-CHECK-NEXT: ~NonTrivialTemplate
183-
// X-CHECK-NEXT: ~NonTrivialTemplate
184-
// X-CHECK-NEXT: ~NonTrivialTemplate
167+
{
168+
auto arr = UseCxx::retArrayNonTrivial(1234);
169+
auto val = arr[0];
170+
assert(val.x.x == 1234);
171+
assert(val.x.y == -1234);
172+
}
173+
// CHECK-NEXT: create NonTrivialTemplate
174+
// CHECK-NEXT: copy NonTrivialTemplate
175+
// CHECK-NEXT: move NonTrivialTemplate
176+
// CHECK-NEXT: ~NonTrivialTemplate
177+
// CHECK-NEXT: ~NonTrivialTemplate
178+
// CHECK-NEXT: ~NonTrivialTemplate
185179
puts("EndOfTest");
186180
// CHECK-NEXT: EndOfTest
187181
return 0;

test/Interop/CxxToSwiftToCxx/bridge-cxx-struct-back-to-cxx.swift

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// RUN: %empty-directory(%t)
22
// RUN: split-file %s %t
33

4-
// RUN: %target-swift-frontend -c %t/use-cxx-types.swift -disable-availability-checking -module-name UseCxxTy -emit-clang-header-path %t/UseCxxTy.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=all-public
4+
// RUN: %target-swift-frontend -typecheck %t/use-cxx-types.swift -typecheck -module-name UseCxxTy -emit-clang-header-path %t/UseCxxTy.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=all-public
55

66
// RUN: %FileCheck %s < %t/UseCxxTy.h
77

8-
// RUN: %target-swift-frontend -c %t/use-cxx-types.swift -disable-availability-checking -module-name UseCxxTy -emit-clang-header-path %t/UseCxxTyExposeOnly.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=has-expose-attr
8+
// RUN: %target-swift-frontend -typecheck %t/use-cxx-types.swift -typecheck -module-name UseCxxTy -emit-clang-header-path %t/UseCxxTyExposeOnly.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=has-expose-attr
99

1010
// RUN: %FileCheck %s < %t/UseCxxTyExposeOnly.h
1111

@@ -39,7 +39,6 @@ namespace ns {
3939
~NonTrivialTemplate() {}
4040
};
4141

42-
using NonTrivialTemplateCInt = NonTrivialTemplate<int>;
4342
using TypeAlias = NonTrivialTemplate<TrivialinNS>;
4443

4544
struct NonTrivialImplicitMove {
@@ -90,10 +89,15 @@ public func retImmortalTemplate() -> ns.ImmortalCInt {
9089
}
9190

9291
@_expose(Cxx)
93-
public func retNonTrivial() -> ns.NonTrivialTemplateCInt {
92+
public func retNonTrivial() -> ns.NonTrivialTemplate<CInt> {
9493
return ns.NonTrivialTemplate<CInt>()
9594
}
9695

96+
@_expose(Cxx)
97+
public func retNonTrivial2() -> ns.NonTrivialTemplate<ns.TrivialinNS> {
98+
return ns.NonTrivialTemplate<ns.TrivialinNS>()
99+
}
100+
97101
@_expose(Cxx)
98102
public func retNonTrivialImplicitMove() -> ns.NonTrivialImplicitMove {
99103
return ns.NonTrivialImplicitMove()
@@ -118,7 +122,7 @@ public func takeImmortalTemplate(_ x: ns.ImmortalCInt) {
118122
}
119123

120124
@_expose(Cxx)
121-
public func takeNonTrivial2(_ x: ns.TypeAlias) {
125+
public func takeNonTrivial2(_ x: ns.NonTrivialTemplate<ns.TrivialinNS>) {
122126
}
123127

124128
@_expose(Cxx)
@@ -149,6 +153,36 @@ public func takeTrivialInout(_ x: inout Trivial) {
149153
// CHECK-NEXT: return _impl::$s8UseCxxTy19retImmortalTemplateSo2nsO02__bf10InstN2ns16eF4IiEEVyF();
150154
// CHECK-NEXT: }
151155

156+
// CHECK: } // end namespace
157+
// CHECK-EMPTY:
158+
// CHECK-NEXT: namespace swift {
159+
// CHECK-NEXT: namespace _impl {
160+
// CHECK-EMPTY:
161+
// CHECK-NEXT: // Type metadata accessor for __CxxTemplateInstN2ns18NonTrivialTemplateIiEE
162+
// CHECK-NEXT: SWIFT_EXTERN swift::_impl::MetadataResponseTy $sSo2nsO033__CxxTemplateInstN2ns18NonTrivialC4IiEEVMa(swift::_impl::MetadataRequestTy) SWIFT_NOEXCEPT SWIFT_CALL;
163+
// CHECK-EMPTY:
164+
// CHECK-EMPTY:
165+
// CHECK-NEXT: } // namespace _impl
166+
// CHECK-EMPTY:
167+
// CHECK-NEXT: #pragma clang diagnostic push
168+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
169+
// CHECK-NEXT: template<>
170+
// CHECK-NEXT: static inline const constexpr bool isUsableInGenericContext<ns::NonTrivialTemplate<int>> = true;
171+
// CHECK-NEXT: template<>
172+
// CHECK-NEXT: struct TypeMetadataTrait<ns::NonTrivialTemplate<int>> {
173+
// CHECK-NEXT: static inline void * _Nonnull getTypeMetadata() {
174+
// CHECK-NEXT: return _impl::$sSo2nsO033__CxxTemplateInstN2ns18NonTrivialC4IiEEVMa(0)._0;
175+
// CHECK-NEXT: }
176+
// CHECK-NEXT: };
177+
// CHECK-NEXT: namespace _impl{
178+
// CHECK-NEXT: template<>
179+
// CHECK-NEXT: static inline const constexpr bool isSwiftBridgedCxxRecord<ns::NonTrivialTemplate<int>> = true;
180+
// CHECK-NEXT: } // namespace
181+
// CHECK-NEXT: #pragma clang diagnostic pop
182+
// CHECK-NEXT: } // namespace swift
183+
// CHECK-EMPTY:
184+
// CHECK-NEXT: namespace UseCxxTy {
185+
152186
// CHECK: inline ns::NonTrivialTemplate<int> retNonTrivial() noexcept SWIFT_WARN_UNUSED_RESULT {
153187
// CHECK-NEXT: alignas(alignof(ns::NonTrivialTemplate<int>)) char storage[sizeof(ns::NonTrivialTemplate<int>)];
154188
// CHECK-NEXT: auto * _Nonnull storageObjectPtr = reinterpret_cast<ns::NonTrivialTemplate<int> *>(storage);
@@ -163,30 +197,40 @@ public func takeTrivialInout(_ x: inout Trivial) {
163197
// CHECK-NEXT: namespace swift {
164198
// CHECK-NEXT: namespace _impl {
165199
// CHECK-EMPTY:
166-
// CHECK-NEXT: // Type metadata accessor for NonTrivialImplicitMove
167-
// CHECK-NEXT: SWIFT_EXTERN swift::_impl::MetadataResponseTy $sSo2nsO22NonTrivialImplicitMoveVMa(swift::_impl::MetadataRequestTy) SWIFT_NOEXCEPT SWIFT_CALL;
200+
// CHECK-NEXT: // Type metadata accessor for __CxxTemplateInstN2ns18NonTrivialTemplateINS_11TrivialinNSEEE
201+
// CHECK-NEXT: SWIFT_EXTERN swift::_impl::MetadataResponseTy $sSo2nsO033__CxxTemplateInstN2ns18NonTrivialC20INS_11TrivialinNSEEEVMa(swift::_impl::MetadataRequestTy) SWIFT_NOEXCEPT SWIFT_CALL;
168202
// CHECK-EMPTY:
169203
// CHECK-EMPTY:
170204
// CHECK-NEXT: } // namespace _impl
171205
// CHECK-EMPTY:
172206
// CHECK-NEXT: #pragma clang diagnostic push
173207
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
174208
// CHECK-NEXT: template<>
175-
// CHECK-NEXT: static inline const constexpr bool isUsableInGenericContext<ns::NonTrivialImplicitMove> = true;
209+
// CHECK-NEXT: static inline const constexpr bool isUsableInGenericContext<ns::NonTrivialTemplate<ns::TrivialinNS>> = true;
176210
// CHECK-NEXT: template<>
177-
// CHECK-NEXT: struct TypeMetadataTrait<ns::NonTrivialImplicitMove> {
211+
// CHECK-NEXT: struct TypeMetadataTrait<ns::NonTrivialTemplate<ns::TrivialinNS>> {
178212
// CHECK-NEXT: static inline void * _Nonnull getTypeMetadata() {
179-
// CHECK-NEXT: return _impl::$sSo2nsO22NonTrivialImplicitMoveVMa(0)._0;
213+
// CHECK-NEXT: return _impl::$sSo2nsO033__CxxTemplateInstN2ns18NonTrivialC20INS_11TrivialinNSEEEVMa(0)._0;
180214
// CHECK-NEXT: }
181215
// CHECK-NEXT: };
182216
// CHECK-NEXT: namespace _impl{
183217
// CHECK-NEXT: template<>
184-
// CHECK-NEXT: static inline const constexpr bool isSwiftBridgedCxxRecord<ns::NonTrivialImplicitMove> = true;
218+
// CHECK-NEXT: static inline const constexpr bool isSwiftBridgedCxxRecord<ns::NonTrivialTemplate<ns::TrivialinNS>> = true;
185219
// CHECK-NEXT: } // namespace
186220
// CHECK-NEXT: #pragma clang diagnostic pop
187221
// CHECK-NEXT: } // namespace swift
222+
// CHECK-EMPTY:
223+
// CHECK-NEXT: namespace UseCxxTy {
224+
// CHECK-EMPTY:
225+
// CHECK-NEXT: inline ns::NonTrivialTemplate<ns::TrivialinNS> retNonTrivial2() noexcept SWIFT_WARN_UNUSED_RESULT {
226+
// CHECK-NEXT: alignas(alignof(ns::NonTrivialTemplate<ns::TrivialinNS>)) char storage[sizeof(ns::NonTrivialTemplate<ns::TrivialinNS>)];
227+
// CHECK-NEXT: auto * _Nonnull storageObjectPtr = reinterpret_cast<ns::NonTrivialTemplate<ns::TrivialinNS> *>(storage);
228+
// CHECK-NEXT: _impl::$s8UseCxxTy14retNonTrivial2So2nsO02__b18TemplateInstN2ns18e7TrivialH20INS_11TrivialinNSEEEVyF(storage);
229+
// CHECK-NEXT: ns::NonTrivialTemplate<ns::TrivialinNS> result(static_cast<ns::NonTrivialTemplate<ns::TrivialinNS> &&>(*storageObjectPtr));
230+
// CHECK-NEXT: storageObjectPtr->~NonTrivialTemplate();
231+
// CHECK-NEXT: return result;
232+
// CHECK-NEXT: }
188233

189-
// CHECK: namespace UseCxxTy {
190234
// CHECK: inline ns::NonTrivialImplicitMove retNonTrivialImplicitMove() noexcept SWIFT_WARN_UNUSED_RESULT {
191235
// CHECK-NEXT: alignas(alignof(ns::NonTrivialImplicitMove)) char storage[sizeof(ns::NonTrivialImplicitMove)];
192236
// CHECK-NEXT: auto * _Nonnull storageObjectPtr = reinterpret_cast<ns::NonTrivialImplicitMove *>(storage);

0 commit comments

Comments
 (0)