1
1
// RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=swift-6 %s -validate-tbd-against-ir=none | %FileCheck %s
2
2
// RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=upcoming-swift %s -validate-tbd-against-ir=none | %FileCheck %s
3
3
4
- // REQUIRES: rdar128424443
5
-
6
4
import MoveOnlyCxxValueType
7
5
8
6
func testGetX( ) -> CInt {
@@ -19,10 +17,17 @@ func testSetX(_ x: CInt) {
19
17
20
18
testSetX ( 2 )
21
19
22
- // CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvlu : $@convention(method) (@in_guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer<NonCopyable>
23
- // CHECK: {{.*}}(%[[SELF_VAL:.*]] : $*NonCopyableHolderDerivedDerived):
20
+ // Beware: this test exhibits a subtle difference between open source Clang and AppleClang:
21
+ // AppleClang runs in an ABI compatibility mode with Clang <= 4, which uses a
22
+ // different criteria to determine whether a C++ type can be passed in
23
+ // registers. This causes Swift to assume that NonCopyableHolderDerivedDerived
24
+ // can be both loadable or address-only, depending on the compiler flavor used.
25
+ // (rdar://128424443)
26
+
27
+ // CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvlu : $@convention(method) (@{{(in_)?}}guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer<NonCopyable>
28
+ // CHECK: {{.*}}(%[[SELF_VAL:.*]] : ${{(\*)?}}NonCopyableHolderDerivedDerived):
24
29
// CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseGetterAccessor{{.*}} : $@convention(cxx_method) (@in_guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer<NonCopyable>
25
- // CHECK-NEXT: apply %{{.*}}(%[[SELF_VAL]])
30
+ // CHECK-NEXT: apply %{{.*}}
26
31
27
32
// CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvau : $@convention(method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer<NonCopyable>
28
33
// CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseSetterAccessor{{.*}} : $@convention(cxx_method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer<NonCopyable>
0 commit comments