1
1
// RUN: %empty-directory(%t)
2
2
// RUN: split-file %s %t
3
3
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
5
5
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
7
7
8
8
// RUN: %target-interop-build-clangxx -std=c++20 -c %t/use-swift-cxx-types.cpp -I %t -o %t/swift-cxx-execution.o -g
9
9
// 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 {
41
41
}
42
42
};
43
43
44
- using NonTrivialTemplateTrivial = NonTrivialTemplate<Trivial>;
45
-
46
44
// --- module.modulemap
47
45
module CxxTest {
48
46
header " header.h"
@@ -52,19 +50,19 @@ module CxxTest {
52
50
// --- use-cxx-types.swift
53
51
import CxxTest
54
52
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))
57
55
}
58
56
59
- public func takeNonTrivial (_ x: NonTrivialTemplateTrivial ) {
57
+ public func takeNonTrivial (_ x: NonTrivialTemplate<Trivial> ) {
60
58
print (x)
61
59
}
62
60
63
- public func passThroughNonTrivial (_ x: NonTrivialTemplateTrivial ) -> NonTrivialTemplateTrivial {
61
+ public func passThroughNonTrivial (_ x: NonTrivialTemplate<Trivial> ) -> NonTrivialTemplate<Trivial> {
64
62
return x
65
63
}
66
64
67
- public func inoutNonTrivial (_ x: inout NonTrivialTemplateTrivial ) {
65
+ public func inoutNonTrivial (_ x: inout NonTrivialTemplate<Trivial> ) {
68
66
x.x .y *= 2
69
67
}
70
68
@@ -84,7 +82,6 @@ public func inoutTrivial(_ x: inout Trivial) {
84
82
x.x = x.y + x.x - 11
85
83
}
86
84
87
-
88
85
public func takeGeneric<T>(_ x: T) {
89
86
print (" GENERIC" , x)
90
87
}
@@ -93,10 +90,9 @@ public func retPassThroughGeneric<T>(_ x: T) -> T {
93
90
return x
94
91
}
95
92
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
+ }
100
96
101
97
// --- use-swift-cxx-types.cpp
102
98
@@ -117,15 +113,15 @@ int main() {
117
113
assert (x.x == -11 );
118
114
assert (x.y == -423421 );
119
115
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 );
125
121
}
126
122
// CHECK: Trivial(x: 423421, y: -423421)
127
123
// 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)
129
125
// CHECK-NEXT: Trivial(x: -11, y: -423421)
130
126
{
131
127
auto x = UseCxx::retNonTrivial (-942 );
@@ -136,12 +132,12 @@ int main() {
136
132
UseCxx::inoutNonTrivial (x);
137
133
assert (x.x .y == -1884 );
138
134
assert (x.x .x == 42 );
139
- // UseCxx::takeGeneric(x);
135
+ UseCxx::takeGeneric (x);
140
136
{
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 );
145
141
}
146
142
puts (" secondon non trivial" );
147
143
}
@@ -156,32 +152,30 @@ int main() {
156
152
// CHECK-NEXT: ~NonTrivialTemplate
157
153
// CHECK-NEXT: ~NonTrivialTemplate
158
154
// 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
169
165
// CHECK-NEXT: secondon non trivial
170
166
// 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
185
179
puts (" EndOfTest" );
186
180
// CHECK-NEXT: EndOfTest
187
181
return 0 ;
0 commit comments