Skip to content

Commit e645800

Browse files
committed
[cxx-interop] Add test for iterator conformances with nested typedefs
Follow-up to 34f6cd3.
1 parent 04d055a commit e645800

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

test/Interop/Cxx/stdlib/overlay/Inputs/custom-iterator.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,29 @@ struct HasCustomRACIteratorTag {
259259
}
260260
};
261261

262+
struct HasCustomInheritedRACIteratorTag {
263+
struct CustomTag0 : public std::random_access_iterator_tag {};
264+
using CustomTag1 = CustomTag0;
265+
struct CustomTag2 : public CustomTag1 {};
266+
using CustomTag3 = CustomTag2;
267+
using CustomTag4 = CustomTag3;
268+
269+
int value;
270+
using iterator_category = CustomTag4;
271+
const int &operator*() const { return value; }
272+
HasCustomInheritedRACIteratorTag &operator++() {
273+
value++;
274+
return *this;
275+
}
276+
void operator+=(int x) { value += x; }
277+
int operator-(const HasCustomInheritedRACIteratorTag &x) const {
278+
return value - x.value;
279+
}
280+
bool operator==(const HasCustomInheritedRACIteratorTag &other) const {
281+
return value == other.value;
282+
}
283+
};
284+
262285
struct HasCustomIteratorTagInline {
263286
struct iterator_category : public std::input_iterator_tag {};
264287

test/Interop/Cxx/stdlib/overlay/custom-iterator-module-interface.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,23 @@
6666
// CHECK: static func == (lhs: HasCustomRACIteratorTag, other: HasCustomRACIteratorTag) -> Bool
6767
// CHECK: }
6868

69+
// CHECK: struct HasCustomInheritedRACIteratorTag : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
70+
// CHECK: func successor() -> HasCustomInheritedRACIteratorTag
71+
// CHECK: var pointee: Int32 { get }
72+
// CHECK: typealias Pointee = Int32
73+
// CHECK: typealias Distance = Int32
74+
// CHECK: struct CustomTag0 {
75+
// CHECK: init()
76+
// CHECK: }
77+
// CHECK: typealias CustomTag1 = HasCustomInheritedRACIteratorTag.CustomTag0
78+
// CHECK: struct CustomTag2 {
79+
// CHECK: init()
80+
// CHECK: }
81+
// CHECK: typealias CustomTag3 = HasCustomInheritedRACIteratorTag.CustomTag2
82+
// CHECK: typealias CustomTag4 = HasCustomInheritedRACIteratorTag.CustomTag3
83+
// CHECK: typealias iterator_category = HasCustomInheritedRACIteratorTag.CustomTag4
84+
// CHECK: }
85+
6986
// CHECK: struct HasCustomIteratorTagInline : UnsafeCxxInputIterator {
7087
// CHECK: func successor() -> HasCustomIteratorTagInline
7188
// CHECK: var pointee: Int32 { get }

0 commit comments

Comments
 (0)