Skip to content

Commit cecf19d

Browse files
committed
[cxx-interop] Test std::optional with AddressableParameters
Enabling AddressableParameters feature resolves a miscompile with `var pointee` properties of `std::optional`. rdar://154945438 / #82765
1 parent 6c87a0c commit cecf19d

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

test/Interop/Cxx/stdlib/use-std-optional.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=swift-5.9)
22
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=swift-6)
33
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift)
4+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift -enable-experimental-feature AddressableParameters)
45
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift -Xcc -std=c++20)
56
//
67
// REQUIRES: executable_test
8+
// REQUIRES: swift_feature_AddressableParameters
79

810
import StdlibUnittest
911
import StdOptional
@@ -58,10 +60,18 @@ StdOptionalTestSuite.test("std::optional init(_:Wrapped)") {
5860

5961
// FIXME: making these variables immutable triggers a miscompile on Linux
6062
// (https://github.com/swiftlang/swift/issues/82765)
61-
var optBoolT = StdOptionalBool(true)
62-
var optBoolF = StdOptionalBool(false)
63+
var optBoolTMutable = StdOptionalBool(true)
64+
var optBoolFMutable = StdOptionalBool(false)
65+
expectTrue(optBoolTMutable.pointee)
66+
expectFalse(optBoolFMutable.pointee)
67+
68+
// If AddressableParameters are enabled, this issue does not happen.
69+
#if hasFeature(AddressableParameters)
70+
let optBoolT = StdOptionalBool(true)
71+
let optBoolF = StdOptionalBool(false)
6372
expectTrue(optBoolT.pointee)
6473
expectFalse(optBoolF.pointee)
74+
#endif
6575

6676
let optString = StdOptionalString(std.string("abc"))
6777
expectEqual(std.string("abc"), optString.pointee)

0 commit comments

Comments
 (0)