File tree Expand file tree Collapse file tree 3 files changed +29
-2
lines changed
test/Interop/Cxx/operators Expand file tree Collapse file tree 3 files changed +29
-2
lines changed Original file line number Diff line number Diff line change @@ -2577,6 +2577,17 @@ namespace {
25772577 if (!dc)
25782578 return nullptr ;
25792579
2580+ bool isOperator = decl->getDeclName ().getNameKind () ==
2581+ clang::DeclarationName::CXXOperatorName;
2582+ bool isNonSubscriptOperator =
2583+ isOperator && (decl->getDeclName ().getCXXOverloadedOperator () !=
2584+ clang::OO_Subscript);
2585+
2586+ // For now, we don't support non-subscript operators which are templated
2587+ if (isNonSubscriptOperator && decl->isTemplated ()) {
2588+ return nullptr ;
2589+ }
2590+
25802591 auto aliasedDecl =
25812592 Impl.importDecl (decl->getAliasedNamespace (), getActiveSwiftVersion ());
25822593 if (!aliasedDecl)
Original file line number Diff line number Diff line change @@ -186,11 +186,24 @@ template<class T> struct TemplatedArrayByVal {
186186 T ts[];
187187 T operator [](int i) { return ts[i]; }
188188};
189+
189190typedef TemplatedArrayByVal<double > TemplatedDoubleArrayByVal;
190191
191- struct TemplatedSubscriptArrayByVal {
192+ template <class T >
193+ struct TemplatedByVal {
194+ T val;
195+ TemplatedByVal<T> operator +(TemplatedByVal other) {
196+ return TemplatedByVal{.val = val + other.val };
197+ }
198+ };
199+
200+ struct TemplatedOperatorArrayByVal {
192201 int *ptr;
193202 template <class T > T operator [](T i) { return ptr[i]; }
203+ template <class T >
204+ T *operator +(T i) {
205+ return ptr + i;
206+ }
194207};
195208
196209struct NonTrivial {
Original file line number Diff line number Diff line change 133133// CHECK: }
134134// CHECK: typealias TemplatedDoubleArrayByVal = __CxxTemplateInst19TemplatedArrayByValIdE
135135
136+ // CHECK: struct TemplatedByVal<T> {
137+ // CHECK-NEXT: }
136138
137- // CHECK: struct TemplatedSubscriptArrayByVal {
139+ // CHECK: struct TemplatedOperatorArrayByVal {
138140// CHECK: subscript(i: T) -> T { mutating get }
139141// CHECK: @available(*, unavailable, message: "use subscript")
140142// CHECK: mutating func __operatorSubscriptConst<T>(_ i: T) -> T
143+ // CHECK-NOT: mutating func __operatorPlus<T>(_ i: T) -> UnsafeMutablePointer<T>
141144// CHECK: }
142145
143146// CHECK: struct NonTrivialArrayByVal {
You can’t perform that action at this time.
0 commit comments