diff --git a/lib/ClangImporter/ImportName.cpp b/lib/ClangImporter/ImportName.cpp index afc0227e590d9..57dac3fdbbcab 100644 --- a/lib/ClangImporter/ImportName.cpp +++ b/lib/ClangImporter/ImportName.cpp @@ -1964,6 +1964,7 @@ ImportedName NameImporter::importNameImpl(const clang::NamedDecl *D, case clang::OverloadedOperatorKind::OO_Caret: case clang::OverloadedOperatorKind::OO_Amp: case clang::OverloadedOperatorKind::OO_Pipe: + case clang::OverloadedOperatorKind::OO_Tilde: case clang::OverloadedOperatorKind::OO_Exclaim: case clang::OverloadedOperatorKind::OO_Less: case clang::OverloadedOperatorKind::OO_Greater: diff --git a/test/Interop/Cxx/operators/Inputs/non-member-inline.h b/test/Interop/Cxx/operators/Inputs/non-member-inline.h index 04109aae4f58f..3ccdc94c579bf 100644 --- a/test/Interop/Cxx/operators/Inputs/non-member-inline.h +++ b/test/Interop/Cxx/operators/Inputs/non-member-inline.h @@ -29,6 +29,10 @@ inline LoadableIntWrapper operator^(LoadableIntWrapper lhs, LoadableIntWrapper r return LoadableIntWrapper{.value = lhs.value ^ rhs.value}; } +inline LoadableIntWrapper operator~(LoadableIntWrapper lhs) { + return LoadableIntWrapper{.value = ~lhs.value}; +} + inline LoadableIntWrapper operator&(LoadableIntWrapper lhs, LoadableIntWrapper rhs) { return LoadableIntWrapper{.value = lhs.value & rhs.value}; } diff --git a/test/Interop/Cxx/operators/non-member-inline-module-interface.swift b/test/Interop/Cxx/operators/non-member-inline-module-interface.swift index 222fb5adaf439..a3f11826642b2 100644 --- a/test/Interop/Cxx/operators/non-member-inline-module-interface.swift +++ b/test/Interop/Cxx/operators/non-member-inline-module-interface.swift @@ -6,6 +6,7 @@ // CHECK-NEXT: func / (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper // CHECK-NEXT: func % (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper // CHECK-NEXT: func ^ (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper +// CHECK-NEXT: func ~ (lhs: LoadableIntWrapper) -> LoadableIntWrapper // CHECK-NEXT: func & (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper // CHECK-NEXT: func | (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper // CHECK-NEXT: func << (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper diff --git a/test/Interop/Cxx/operators/non-member-inline.swift b/test/Interop/Cxx/operators/non-member-inline.swift index ee763941b7078..1132ff1728ce0 100644 --- a/test/Interop/Cxx/operators/non-member-inline.swift +++ b/test/Interop/Cxx/operators/non-member-inline.swift @@ -52,6 +52,14 @@ OperatorsTestSuite.test("caret (^)") { expectEqual(61, result.value) } +OperatorsTestSuite.test("tilde (~)") { + let lhs = LoadableIntWrapper(value: 42) + + let result = ~lhs + + expectEqual(-43, result.value) +} + OperatorsTestSuite.test("percent (%)") { let lhs = LoadableIntWrapper(value: 11) let rhs = LoadableIntWrapper(value: 2)