Skip to content

Commit 00ed3bd

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 6f0ab5d commit 00ed3bd

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
// Undefined hidden symbol to C++ voidify in libcxx
911
// rdar://121551667
@@ -62,10 +64,18 @@ StdOptionalTestSuite.test("std::optional init(_:Wrapped)") {
6264

6365
// FIXME: making these variables immutable triggers a miscompile on Linux
6466
// (https://github.com/swiftlang/swift/issues/82765)
65-
var optBoolT = StdOptionalBool(true)
66-
var optBoolF = StdOptionalBool(false)
67+
var optBoolTMutable = StdOptionalBool(true)
68+
var optBoolFMutable = StdOptionalBool(false)
69+
expectTrue(optBoolTMutable.pointee)
70+
expectFalse(optBoolFMutable.pointee)
71+
72+
// If AddressableParameters are enabled, this issue does not happen.
73+
#if hasFeature(AddressableParameters)
74+
let optBoolT = StdOptionalBool(true)
75+
let optBoolF = StdOptionalBool(false)
6776
expectTrue(optBoolT.pointee)
6877
expectFalse(optBoolF.pointee)
78+
#endif
6979

7080
let optString = StdOptionalString(std.string("abc"))
7181
expectEqual(std.string("abc"), optString.pointee)

0 commit comments

Comments
 (0)