11// RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=swift-6 %s -validate-tbd-against-ir=none | %FileCheck %s
22// RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=upcoming-swift %s -validate-tbd-against-ir=none | %FileCheck %s
33
4- // REQUIRES: rdar128424443
5-
64import MoveOnlyCxxValueType
75
86func testGetX( ) -> CInt {
@@ -19,10 +17,17 @@ func testSetX(_ x: CInt) {
1917
2018testSetX ( 2 )
2119
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):
2429// CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseGetterAccessor{{.*}} : $@convention(cxx_method) (@in_guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer<NonCopyable>
25- // CHECK-NEXT: apply %{{.*}}(%[[SELF_VAL]])
30+ // CHECK-NEXT: apply %{{.*}}
2631
2732// CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvau : $@convention(method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer<NonCopyable>
2833// CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseSetterAccessor{{.*}} : $@convention(cxx_method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer<NonCopyable>
0 commit comments