1
1
// RUN: %empty-directory(%t)
2
2
// RUN: split-file %s %t
3
3
4
- // 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
4
+ // 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
5
5
6
6
// RUN: %target-interop-build-clangxx -std=c++20 -c %t/use-swift-cxx-types.cpp -I %t -o %t/swift-cxx-execution.o
7
- // 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 -O
7
+ // 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 -O -Xfrontend -disable-availability-checking
8
8
9
9
// RUN: %target-codesign %t/swift-cxx-execution
10
10
// RUN: %target-run %t/swift-cxx-execution | %FileCheck %s
@@ -44,6 +44,13 @@ struct NonTrivialTemplate {
44
44
45
45
using NonTrivialTemplateTrivial = NonTrivialTemplate<Trivial>;
46
46
47
+ class ImmortalFRT {
48
+ public:
49
+ int x;
50
+ } __attribute__((swift_attr(" import_reference" )))
51
+ __attribute__ ((swift_attr(" retain:immortal" )))
52
+ __attribute__((swift_attr(" release:immortal" )));
53
+
47
54
// --- module.modulemap
48
55
module CxxTest {
49
56
header " header.h"
@@ -66,6 +73,10 @@ public struct TakesNonTrivial {
66
73
public var prop: NonTrivialTemplateTrivial
67
74
}
68
75
76
+ public func consumeImmortalFRT (_ x: consuming ImmortalFRT) {
77
+ print (" frt x \(x.x)" )
78
+ }
79
+
69
80
// --- use-swift-cxx-types.cpp
70
81
71
82
#include " header.h"
@@ -91,7 +102,6 @@ int main() {
91
102
puts (" DoneCall" );
92
103
swiftVal.setProp (x);
93
104
}
94
- puts (" EndOfTest" );
95
105
// CHECK-NEXT: create NonTrivialTemplate
96
106
// CHECK-NEXT: call
97
107
// CHECK-NEXT: copy NonTrivialTemplate
@@ -104,6 +114,13 @@ int main() {
104
114
// CHECK-NEXT: ~NonTrivialTemplate
105
115
// CHECK-NEXT: ~NonTrivialTemplate
106
116
// CHECK-NEXT: ~NonTrivialTemplate
117
+ {
118
+ ImmortalFRT frt;
119
+ frt.x = 2 ;
120
+ UseCxx::consumeImmortalFRT (&frt);
121
+ }
122
+ // CHECK-NEXT: frt x 2
123
+ puts (" EndOfTest" );
107
124
// CHECK-NEXT: EndOfTest
108
125
return 0 ;
109
126
}
0 commit comments