File tree Expand file tree Collapse file tree 3 files changed +35
-6
lines changed
test/Interop/Cxx/operators Expand file tree Collapse file tree 3 files changed +35
-6
lines changed Original file line number Diff line number Diff line change @@ -2116,6 +2116,15 @@ namespace {
2116
2116
continue ;
2117
2117
}
2118
2118
2119
+ if (auto friendDecl = dyn_cast<clang::FriendDecl>(m)) {
2120
+ if (friendDecl->getFriendDecl ()) {
2121
+ m = friendDecl->getFriendDecl ();
2122
+ auto lookupTable = Impl.findLookupTable (m->getOwningModule ());
2123
+ addEntryToLookupTable (*lookupTable, friendDecl->getFriendDecl (),
2124
+ Impl.getNameImporter ());
2125
+ }
2126
+ }
2127
+
2119
2128
auto nd = dyn_cast<clang::NamedDecl>(m);
2120
2129
if (!nd) {
2121
2130
// We couldn't import the member, so we can't reference it in Swift.
@@ -2145,6 +2154,7 @@ namespace {
2145
2154
}
2146
2155
2147
2156
Decl *member = Impl.importDecl (nd, getActiveSwiftVersion ());
2157
+
2148
2158
if (!member) {
2149
2159
if (!isa<clang::TypeDecl>(nd) && !isa<clang::FunctionDecl>(nd)) {
2150
2160
// We don't know what this member is.
@@ -4764,12 +4774,6 @@ namespace {
4764
4774
return nullptr ;
4765
4775
}
4766
4776
4767
- Decl *VisitFriendDecl (const clang::FriendDecl *decl) {
4768
- // Friends are not imported; Swift has a different access control
4769
- // mechanism.
4770
- return nullptr ;
4771
- }
4772
-
4773
4777
Decl *VisitFriendTemplateDecl (const clang::FriendTemplateDecl *decl) {
4774
4778
// Friends are not imported; Swift has a different access control
4775
4779
// mechanism.
Original file line number Diff line number Diff line change @@ -21,6 +21,16 @@ struct LoadableIntWrapper {
21
21
value++;
22
22
return *this ;
23
23
}
24
+
25
+ // Friend functions
26
+ friend bool operator ==(const LoadableIntWrapper lhs,
27
+ const LoadableIntWrapper &rhs) {
28
+ return lhs.value == rhs.value ;
29
+ }
30
+
31
+ friend LoadableIntWrapper operator -(const LoadableIntWrapper& obj) {
32
+ return LoadableIntWrapper{.value = -obj.value };
33
+ }
24
34
};
25
35
26
36
struct LoadableBoolWrapper {
Original file line number Diff line number Diff line change @@ -30,6 +30,21 @@ OperatorsTestSuite.test("AddressOnlyIntWrapper.minus") {
30
30
}
31
31
#endif
32
32
33
+ OperatorsTestSuite . test ( " LoadableIntWrapper.equal (inline) " ) {
34
+ let lhs = LoadableIntWrapper ( value: 42 )
35
+ let rhs = LoadableIntWrapper ( value: 42 )
36
+
37
+ let result = lhs == rhs
38
+
39
+ expectTrue ( result)
40
+ }
41
+
42
+ OperatorsTestSuite . test ( " LoadableIntWrapper.unaryMinus (inline) " ) {
43
+ let lhs = LoadableIntWrapper ( value: 42 )
44
+ let inverseLhs = - lhs;
45
+ expectEqual ( - 42 , inverseLhs. value)
46
+ }
47
+
33
48
OperatorsTestSuite . test ( " LoadableIntWrapper.call (inline) " ) {
34
49
var wrapper = LoadableIntWrapper ( value: 42 )
35
50
You can’t perform that action at this time.
0 commit comments