@@ -32,6 +32,10 @@ public class BaseClass {
3232 }
3333 }
3434 public var storedProp : Int = 0
35+
36+ public subscript( _ i: Int ) -> Int {
37+ return i
38+ }
3539}
3640
3741public class DerivedClass : BaseClass {
@@ -67,6 +71,10 @@ public class DerivedClass: BaseClass {
6771 super. storedProp = newValue
6872 }
6973 }
74+
75+ override public subscript( _ i: Int ) -> Int {
76+ return i * 2
77+ }
7078}
7179
7280public final class DerivedDerivedClass : DerivedClass {
@@ -166,6 +174,13 @@ public func returnDerivedDerivedClass() -> DerivedDerivedClass {
166174// CHECK-NEXT: return (* fptr_)(value, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
167175// CHECK-NEXT: }
168176
177+ // CHECK: swift::Int BaseClass::operator [](swift::Int i) const
178+ // CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
179+ // CHECK-NEXT: void **vtable_ = *selfPtr_;
180+ // CHECK-NEXT: using FType = decltype(_impl::$s5Class04BaseA0CyS2icig);
181+ // CHECK-NEXT: FType *fptr_ = reinterpret_cast<FType *>(*(vtable_ + [[#VM1 + 9]]));
182+ // CHECK-NEXT: return (* fptr_)(i, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
183+
169184// CHECK: void DerivedClass::virtualMethod() {
170185// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
171186// CHECK-NEXT: void **vtable_ = *selfPtr_;
@@ -186,7 +201,7 @@ public func returnDerivedDerivedClass() -> DerivedDerivedClass {
186201// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
187202// CHECK-NEXT: void **vtable_ = *selfPtr_;
188203// CHECK-NEXT: using FType = decltype(_impl::$s5Class07DerivedA0C015virtualMethodInB0yAA04BaseA0CAFF);
189- // CHECK-NEXT: FType *fptr_ = reinterpret_cast<FType *>(*(vtable_ + [[#VM1 + 9 ]]));
204+ // CHECK-NEXT: FType *fptr_ = reinterpret_cast<FType *>(*(vtable_ + [[#VM1 + 10 ]]));
190205// CHECK-NEXT: return _impl::_impl_BaseClass::makeRetained((* fptr_)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(x), ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this)));
191206// CHECK-NEXT: }
192207
@@ -230,6 +245,13 @@ public func returnDerivedDerivedClass() -> DerivedDerivedClass {
230245// CHECK-NEXT: return (* fptr_)(newValue, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
231246// CHECK-NEXT: }
232247
248+ // CHECK: swift::Int DerivedClass::operator [](swift::Int i) const
249+ // CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
250+ // CHECK-NEXT: void **vtable_ = *selfPtr_;
251+ // CHECK-NEXT: using FType = decltype(_impl::$s5Class07DerivedA0CyS2icig);
252+ // CHECK-NEXT: FType *fptr_ = reinterpret_cast<FType *>(*(vtable_ + [[#VM1 + 9]]));
253+ // CHECK-NEXT: return (* fptr_)(i, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
254+
233255// CHECK: void DerivedDerivedClass::virtualMethod() {
234256// CHECK-NEXT: return _impl::$s5Class07DerivedbA0C13virtualMethodyyF(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
235257// CHECK-NEXT: }
0 commit comments