diff --git a/test/Interop/Cxx/class/move-only/inherited-field-access-silgen.swift b/test/Interop/Cxx/class/move-only/inherited-field-access-silgen.swift index c702bb9a80213..d69dbd39fe9d6 100644 --- a/test/Interop/Cxx/class/move-only/inherited-field-access-silgen.swift +++ b/test/Interop/Cxx/class/move-only/inherited-field-access-silgen.swift @@ -1,8 +1,6 @@ // RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=swift-6 %s -validate-tbd-against-ir=none | %FileCheck %s // RUN: %target-swift-emit-sil -I %S/Inputs -cxx-interoperability-mode=upcoming-swift %s -validate-tbd-against-ir=none | %FileCheck %s -// REQUIRES: rdar128424443 - import MoveOnlyCxxValueType func testGetX() -> CInt { @@ -19,10 +17,17 @@ func testSetX(_ x: CInt) { testSetX(2) -// CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvlu : $@convention(method) (@in_guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer -// CHECK: {{.*}}(%[[SELF_VAL:.*]] : $*NonCopyableHolderDerivedDerived): +// Beware: this test exhibits a subtle difference between open source Clang and AppleClang: +// AppleClang runs in an ABI compatibility mode with Clang <= 4, which uses a +// different criteria to determine whether a C++ type can be passed in +// registers. This causes Swift to assume that NonCopyableHolderDerivedDerived +// can be both loadable or address-only, depending on the compiler flavor used. +// (rdar://128424443) + +// CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvlu : $@convention(method) (@{{(in_)?}}guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer +// CHECK: {{.*}}(%[[SELF_VAL:.*]] : ${{(\*)?}}NonCopyableHolderDerivedDerived): // CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseGetterAccessor{{.*}} : $@convention(cxx_method) (@in_guaranteed NonCopyableHolderDerivedDerived) -> UnsafePointer -// CHECK-NEXT: apply %{{.*}}(%[[SELF_VAL]]) +// CHECK-NEXT: apply %{{.*}} // CHECK: sil shared [transparent] @$sSo024NonCopyableHolderDerivedD0V1xSo0aB0Vvau : $@convention(method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer // CHECK: function_ref @{{.*}}__synthesizedBaseCall___synthesizedBaseSetterAccessor{{.*}} : $@convention(cxx_method) (@inout NonCopyableHolderDerivedDerived) -> UnsafeMutablePointer