Skip to content

Commit e9dd910

Browse files
committed
[cxx-interop] Update the std::pair safety test
The test was passing by accident: we didn't properly check `std::pair` type for completeness, and assumed that it is incomplete. This updates the test to actually verify the behavior that is specified in the vision document.
1 parent 4ca4b9a commit e9dd910

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

test/Interop/Cxx/stdlib/Inputs/std-pair.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct __attribute__((swift_attr("import_iterator"))) Iterator {};
3535
using PairUnsafeStructInt = std::pair<UnsafeStruct, int>;
3636
using PairIteratorInt = std::pair<Iterator, int>;
3737

38-
struct HasMethodThatReturnsUnsafePair {
38+
struct __attribute__((swift_attr("import_owned"))) HasMethodThatReturnsUnsafePair {
3939
PairUnsafeStructInt getUnsafePair() const { return {}; }
4040
PairIteratorInt getIteratorPair() const { return {}; }
4141
};
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
// RUN: %target-typecheck-verify-swift -I %S/Inputs -enable-experimental-cxx-interop
1+
// RUN: not %target-swift-frontend %s -typecheck -I %S/Inputs -enable-experimental-cxx-interop 2>&1 | %FileCheck %s
22

33
import StdPair
44

55
let u = HasMethodThatReturnsUnsafePair()
6-
u.getUnsafePair() // expected-error {{value of type 'HasMethodThatReturnsUnsafePair' has no member 'getUnsafePair'}}
7-
u.getIteratorPair() // expected-error {{value of type 'HasMethodThatReturnsUnsafePair' has no member 'getIteratorPair'}}
6+
u.getUnsafePair()
7+
// CHECK: error: value of type 'HasMethodThatReturnsUnsafePair' has no member 'getUnsafePair'
8+
// CHECK: note: C++ method 'getUnsafePair' may return an interior pointer
9+
10+
u.getIteratorPair()
11+
// CHECK: error: value of type 'HasMethodThatReturnsUnsafePair' has no member 'getIteratorPair'
12+
// CHECK: note: C++ method 'getIteratorPair' may return an interior pointer

0 commit comments

Comments
 (0)