Skip to content

Commit 856216d

Browse files
committed
[cxx-interop] Use more correct type names in C++ template parameters
When importing a C++ class template instantiation, Swift translates the template parameter type names from C++ into their Swift equivalent. For instance, `basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>` gets imported as `basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>>`: `wchar_t` is imported as `CWideChar`, which is a typealias for `Scalar` on most platforms including Darwin. Notice that Swift goes through the `CWideChar` typealias on the specific platform. Another instantiation `basic_string<uint32_t, char_traits<uint32_t>, allocator<uint32_t>>` also gets imported as `basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>>`: `uint32_t` is also imported as `Scalar`. This is problematic because we have two distinct C++ types that have the same name in Swift. This change makes sure Swift doesn't go through typealiases when emitting names of template parameters, so `wchar_t` would now get printed as `CWideChar`, `int` would get printed as `CInt`, etc. This also encourages clients to use the correct type (`CInt`, `CWideChar`, etc) instead of relying on platform-specific typealiases. rdar://115673622
1 parent 26653a7 commit 856216d

26 files changed

+110
-110
lines changed

lib/ClangImporter/ImportName.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2240,8 +2240,8 @@ ImportedName NameImporter::importNameImpl(const clang::NamedDecl *D,
22402240
}
22412241

22422242
if (swiftType) {
2243-
if (auto nominal = swiftType->getAs<NominalType>()) {
2244-
return nominal->getDecl()->getNameStr();
2243+
if (swiftType->is<NominalType>()) {
2244+
return swiftType->getString();
22452245
}
22462246
}
22472247
return std::nullopt;

test/Interop/Cxx/class/inheritance/virtual-methods-module-interface.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// CHECK-NEXT: @available(*, unavailable, message: "virtual functions are not yet available in Swift")
66
// CHECK-NEXT: mutating func foo()
77

8-
// CHECK: struct Derived<Int32> {
8+
// CHECK: struct Derived<CInt> {
99
// CHECK: @available(*, unavailable, message: "virtual functions are not yet available in Swift")
1010
// CHECK: mutating func foo()
1111
// CHECK: }

test/Interop/Cxx/namespace/class-inline-namespace-irgen.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ extension Parent.TypedefInInlineChild {
4848
return ""
4949
}
5050
}
51-
// CHECK: define hidden swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbV4testE6stringSSvg"()
51+
// CHECK: define hidden swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbV4testE6stringSSvg"()
5252

5353
extension Parent.InInlineChild {
5454
func doSomething() {
@@ -70,22 +70,22 @@ extension Parent.InlineChild.InSecondInlineChild {
7070
}
7171
// define hidden swiftcc {{.*}} @"$sSo6ParentO11InlineChildO06SecondbC0O02IndbC0V4testE1ySivg"()
7272

73-
// CHECK: define hidden swiftcc {{.*}} @"$s4test3useySSSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbVF"()
74-
// CHECK: call swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbV4testE6stringSSvg"
73+
// CHECK: define hidden swiftcc {{.*}} @"$s4test3useySSSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbVF"()
74+
// CHECK: call swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbV4testE6stringSSvg"
7575
func use(_ x: Parent.TypedefInInlineChild) -> String {
7676
let s = x.string
7777
return s
7878
}
7979

80-
// CHECK: define hidden swiftcc {{.*}} @"$s4test4use2ySSSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbVF"()
81-
// CHECK: call swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbV4testE6stringSSvg"
80+
// CHECK: define hidden swiftcc {{.*}} @"$s4test4use2ySSSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbVF"()
81+
// CHECK: call swiftcc {{.*}} @"$sSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbV4testE6stringSSvg"
8282
func use2(_ x: Parent.InlineChild.TypedefInInlineChild) -> String {
8383
let s = x.string
8484
return s
8585
}
8686

8787
// define swiftcc void @"$s4testAAyySo6ParentO11InlineChildO02IncD0VF"()
88-
// CHECK: alloca %TSo6ParentO11InlineChildO0033TemplateInInlineChildInt8_ehGIixbV
88+
// CHECK: alloca %TSo6ParentO11InlineChildO0034TemplateInInlineChildCChar_ckBDjAbV
8989
// CHECK: call {{.*}} @{{_ZN6Parent11InlineChild21TemplateInInlineChildIcEC|"\?\?0\?\$TemplateInInlineChild@D@InlineChild@Parent@@QEAA@XZ"}}
9090
// CHECK: call swiftcc void @"$sSo6ParentO11InlineChildO02InbC0V4testE11doSomethingyyF"(
9191
// CHECK: call swiftcc {{.*}} @"$sSo6ParentO11InlineChildO06SecondbC0O02IndbC0V4testE1xSivg"(

test/Interop/Cxx/namespace/templates-module-interface.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,59 +3,59 @@
33
// CHECK: enum TemplatesNS1 {
44
// CHECK-NEXT: enum TemplatesNS2 {
55
// CHECK-NEXT: static func forwardDeclaredFunctionTemplate<T>(_: T) -> UnsafePointer<CChar>!
6-
// CHECK-NEXT: struct ForwardDeclaredClassTemplate<Int8> {
6+
// CHECK-NEXT: struct ForwardDeclaredClassTemplate<CChar> {
77
// CHECK-NEXT: init()
88
// CHECK-NEXT: mutating func basicMember() -> UnsafePointer<CChar>!
99
// CHECK-NEXT: }
1010
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
1111
// CHECK-NEXT: struct ForwardDeclaredClassTemplate<> {
1212
// CHECK-NEXT: }
1313
// CHECK-NEXT: static func forwardDeclaredFunctionTemplateOutOfLine<T>(_: T) -> UnsafePointer<CChar>!
14-
// CHECK-NEXT: struct ForwardDeclaredClassTemplateOutOfLine<Int8> {
14+
// CHECK-NEXT: struct ForwardDeclaredClassTemplateOutOfLine<CChar> {
1515
// CHECK-NEXT: init()
1616
// CHECK-NEXT: mutating func basicMember() -> UnsafePointer<CChar>!
1717
// CHECK-NEXT: }
1818
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
1919
// CHECK-NEXT: struct ForwardDeclaredClassTemplateOutOfLine<> {
2020
// CHECK-NEXT: }
21-
// CHECK-NEXT: typealias BasicClassTemplateChar = TemplatesNS1.TemplatesNS3.BasicClassTemplate<Int8>
21+
// CHECK-NEXT: typealias BasicClassTemplateChar = TemplatesNS1.TemplatesNS3.BasicClassTemplate<CChar>
2222
// CHECK-NEXT: static func takesClassTemplateFromSibling(_: TemplatesNS1.TemplatesNS2.BasicClassTemplateChar) -> UnsafePointer<CChar>!
2323
// CHECK-NEXT: }
2424
// CHECK-NEXT: static func basicFunctionTemplate<T>(_: T) -> UnsafePointer<CChar>!
25-
// CHECK-NEXT: struct BasicClassTemplate<Int8> {
25+
// CHECK-NEXT: struct BasicClassTemplate<CChar> {
2626
// CHECK-NEXT: init()
2727
// CHECK-NEXT: mutating func basicMember() -> UnsafePointer<CChar>!
2828
// CHECK-NEXT: }
2929
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
3030
// CHECK-NEXT: struct BasicClassTemplate<> {
3131
// CHECK-NEXT: }
32-
// CHECK-NEXT: typealias BasicClassTemplateChar = TemplatesNS1.BasicClassTemplate<Int8>
32+
// CHECK-NEXT: typealias BasicClassTemplateChar = TemplatesNS1.BasicClassTemplate<CChar>
3333
// CHECK-NEXT: static func basicFunctionTemplateDefinedInDefs<T>(_: T) -> UnsafePointer<CChar>!
3434
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
3535
// CHECK-NEXT: struct BasicClassTemplateDefinedInDefs<> {
3636
// CHECK-NEXT: }
37-
// CHECK-NEXT: typealias UseTemplate = TemplatesNS4.HasSpecialization<Int8>
38-
// CHECK-NEXT: typealias UseSpecialized = TemplatesNS4.HasSpecialization<Int32>
37+
// CHECK-NEXT: typealias UseTemplate = TemplatesNS4.HasSpecialization<CChar>
38+
// CHECK-NEXT: typealias UseSpecialized = TemplatesNS4.HasSpecialization<CInt>
3939
// CHECK-NEXT: enum TemplatesNS3 {
40-
// CHECK-NEXT: struct BasicClassTemplate<Int8> {
40+
// CHECK-NEXT: struct BasicClassTemplate<CChar> {
4141
// CHECK-NEXT: init()
4242
// CHECK-NEXT: }
4343
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
4444
// CHECK-NEXT: struct BasicClassTemplate<> {
4545
// CHECK-NEXT: }
4646
// CHECK-NEXT: }
47-
// CHECK-NEXT: struct ForwardDeclaredClassTemplate<Int8> {
47+
// CHECK-NEXT: struct ForwardDeclaredClassTemplate<CChar> {
4848
// CHECK-NEXT: init()
4949
// CHECK-NEXT: mutating func basicMember() -> UnsafePointer<CChar>!
5050
// CHECK-NEXT: }
51-
// CHECK-NEXT: typealias ForwardDeclaredClassTemplateChar = TemplatesNS1.TemplatesNS2.ForwardDeclaredClassTemplate<Int8>
51+
// CHECK-NEXT: typealias ForwardDeclaredClassTemplateChar = TemplatesNS1.TemplatesNS2.ForwardDeclaredClassTemplate<CChar>
5252
// CHECK-NEXT: }
53-
// CHECK-NEXT: typealias ForwardDeclaredClassTemplateOutOfLineChar = TemplatesNS1.TemplatesNS2.ForwardDeclaredClassTemplateOutOfLine<Int8>
53+
// CHECK-NEXT: typealias ForwardDeclaredClassTemplateOutOfLineChar = TemplatesNS1.TemplatesNS2.ForwardDeclaredClassTemplateOutOfLine<CChar>
5454
// CHECK-NEXT: enum TemplatesNS4 {
55-
// CHECK-NEXT: struct HasSpecialization<Int8> {
55+
// CHECK-NEXT: struct HasSpecialization<CChar> {
5656
// CHECK-NEXT: init()
5757
// CHECK-NEXT: }
58-
// CHECK-NEXT: struct HasSpecialization<Int32> {
58+
// CHECK-NEXT: struct HasSpecialization<CInt> {
5959
// CHECK-NEXT: init()
6060
// CHECK-NEXT: }
6161
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")

test/Interop/Cxx/namespace/templates-second-header-module-interface.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
// CHECK: enum TemplatesNS1 {
44
// CHECK: static func basicFunctionTemplateDefinedInDefs<T>(_: T) -> UnsafePointer<CChar>!
5-
// CHECK: struct BasicClassTemplateDefinedInDefs<Int8> {
5+
// CHECK: struct BasicClassTemplateDefinedInDefs<CChar> {
66
// CHECK: init()
77
// CHECK: mutating func basicMember() -> UnsafePointer<CChar>!
88
// CHECK: }
99
// CHECK: }
1010

11-
// CHECK: typealias BasicClassTemplateDefinedInDefsChar = TemplatesNS1.BasicClassTemplateDefinedInDefs<Int8>
11+
// CHECK: typealias BasicClassTemplateDefinedInDefsChar = TemplatesNS1.BasicClassTemplateDefinedInDefs<CChar>
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
// RUN: %target-swift-ide-test -print-module -module-to-print=TemplatesWithForwardDecl -I %S/Inputs -source-filename=x -enable-experimental-cxx-interop | %FileCheck %s
22

33
// CHECK: enum NS1 {
4-
// CHECK-NEXT: struct ForwardDeclared<Int32> {
4+
// CHECK-NEXT: struct ForwardDeclared<CInt> {
55
// CHECK-NEXT: init()
66
// CHECK-NEXT: }
77
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
88
// CHECK-NEXT: struct ForwardDeclared<T> {
99
// CHECK-NEXT: }
10-
// CHECK-NEXT: struct Decl<Int32> {
10+
// CHECK-NEXT: struct Decl<CInt> {
1111
// CHECK-NEXT: init()
12-
// CHECK-NEXT: init(fwd: NS1.ForwardDeclared<Int32>)
12+
// CHECK-NEXT: init(fwd: NS1.ForwardDeclared<CInt>)
1313
// CHECK-NEXT: typealias MyInt = Int32
14-
// CHECK-NEXT: var fwd: NS1.ForwardDeclared<Int32>
15-
// CHECK-NEXT: static let intValue: NS1.Decl<Int32>.MyInt
14+
// CHECK-NEXT: var fwd: NS1.ForwardDeclared<CInt>
15+
// CHECK-NEXT: static let intValue: NS1.Decl<CInt>.MyInt
1616
// CHECK-NEXT: }
1717
// CHECK-NEXT: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.")
1818
// CHECK-NEXT: struct Decl<T> {
1919
// CHECK-NEXT: }
20-
// CHECK-NEXT: typealias di = NS1.Decl<Int32>
20+
// CHECK-NEXT: typealias di = NS1.Decl<CInt>
2121
// CHECK-NEXT: }

test/Interop/Cxx/objc-correctness/init-String-with-NSString-utf8String.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import CxxStdlib
77

88
// CHECK: @"\01L_selector(UTF8String)"
99
// CHECK: @objc_msgSend
10-
// CHECK: call swiftcc void @"$sSo3stdO3__1O0067basic_stringInt8char_traitsInt8allocatorInt8_FABErpaBGcqaGHerapGgqaV9CxxStdlibEyAFSPys4Int8VGSgcfC"
10+
// CHECK: call swiftcc void @"$sSo3stdO3__1O0071basic_stringCCharchar_traitsCCharallocatorCChar_mHGHsqaGJcraCCfsaqChraaV9CxxStdlibEyAFSPys4Int8VGSgcfC"
1111

1212
let ObjCStr: NSString = "hello"
1313
let CxxStr = std.string(ObjCStr.utf8String) // Should not crash here

test/Interop/Cxx/operators/member-inline-module-interface.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494

9595
// CHECK: struct TemplatedArray<T> {
9696
// CHECK: }
97-
// CHECK: struct TemplatedArray<Double> {
97+
// CHECK: struct TemplatedArray<CDouble> {
9898
// CHECK: subscript(i: Int32) -> Double
9999

100100
// CHECK: @available(*, unavailable, message: "use subscript")
@@ -103,7 +103,7 @@
103103
// CHECK: @available(*, unavailable, message: "use subscript")
104104
// CHECK: func __operatorSubscriptConst(_ i: Int32) -> UnsafePointer<Double>
105105
// CHECK: }
106-
// CHECK: typealias TemplatedDoubleArray = TemplatedArray<Double>
106+
// CHECK: typealias TemplatedDoubleArray = TemplatedArray<CDouble>
107107

108108

109109
// CHECK: struct TemplatedSubscriptArray {
@@ -140,12 +140,12 @@
140140

141141
// CHECK: struct TemplatedArrayByVal<T> {
142142
// CHECK: }
143-
// CHECK: struct TemplatedArrayByVal<Double> {
143+
// CHECK: struct TemplatedArrayByVal<CDouble> {
144144
// CHECK: subscript(i: Int32) -> Double { mutating get }
145145
// CHECK: @available(*, unavailable, message: "use subscript")
146146
// CHECK: mutating func __operatorSubscriptConst(_ i: Int32) -> Double
147147
// CHECK: }
148-
// CHECK: typealias TemplatedDoubleArrayByVal = TemplatedArrayByVal<Double>
148+
// CHECK: typealias TemplatedDoubleArrayByVal = TemplatedArrayByVal<CDouble>
149149

150150
// CHECK: struct TemplatedByVal<T> {
151151
// CHECK-NEXT: }

test/Interop/Cxx/stdlib/libcxx-module-interface.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
// CHECK-IOSFWD: enum std {
1212
// CHECK-IOSFWD: enum __1 {
13-
// CHECK-IOSFWD: struct basic_string<Int8, char_traits<Int8>, allocator<Int8>> : CxxRandomAccessCollection {
13+
// CHECK-IOSFWD: struct basic_string<CChar, char_traits<CChar>, allocator<CChar>> : CxxRandomAccessCollection {
1414
// CHECK-IOSFWD: typealias value_type = CChar
1515
// CHECK-IOSFWD: }
16-
// CHECK-IOSFWD: struct basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>> : CxxRandomAccessCollection {
16+
// CHECK-IOSFWD: struct basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>> : CxxRandomAccessCollection {
1717
// CHECK-IOSFWD: typealias value_type = CWideChar
1818
// CHECK-IOSFWD: }
19-
// CHECK-IOSFWD: typealias string = std.__1.basic_string<Int8, char_traits<Int8>, allocator<Int8>>
20-
// CHECK-IOSFWD: typealias wstring = std.__1.basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>>
19+
// CHECK-IOSFWD: typealias string = std.__1.basic_string<CChar, char_traits<CChar>, allocator<CChar>>
20+
// CHECK-IOSFWD: typealias wstring = std.__1.basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>>
2121
// CHECK-IOSFWD: }
2222
// CHECK-IOSFWD: }
2323

test/Interop/Cxx/stdlib/libstdcxx-module-interface.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@
1111
// REQUIRES: OS=linux-gnu
1212

1313
// CHECK-STD: enum std {
14-
// CHECK-STRING: struct basic_string<Int8, char_traits<Int8>, allocator<Int8>> : CxxRandomAccessCollection {
15-
// CHECK-STRING: typealias value_type = std.char_traits<Int8>.char_type
14+
// CHECK-STRING: struct basic_string<CChar, char_traits<CChar>, allocator<CChar>> : CxxRandomAccessCollection {
15+
// CHECK-STRING: typealias value_type = std.char_traits<CChar>.char_type
1616
// CHECK-STRING: }
17-
// CHECK-STRING: struct basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>> : CxxRandomAccessCollection {
18-
// CHECK-STRING: typealias value_type = std.char_traits<Scalar>.char_type
17+
// CHECK-STRING: struct basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>> : CxxRandomAccessCollection {
18+
// CHECK-STRING: typealias value_type = std.char_traits<CWideChar>.char_type
1919
// CHECK-STRING: }
2020

2121
// CHECK-TO-STRING: static func to_string(_ __val: Int32) -> std{{(.__cxx11)?}}.string
2222
// CHECK-TO-STRING: static func to_wstring(_ __val: Int32) -> std{{(.__cxx11)?}}.wstring
2323

2424
// CHECK-SIZE-T: typealias size_t = Int
2525

26-
// CHECK-STRING: typealias string = std{{(.__cxx11)?}}.basic_string<Int8, char_traits<Int8>, allocator<Int8>>
27-
// CHECK-STRING: typealias wstring = std{{(.__cxx11)?}}.basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>>
26+
// CHECK-STRING: typealias string = std{{(.__cxx11)?}}.basic_string<CChar, char_traits<CChar>, allocator<CChar>>
27+
// CHECK-STRING: typealias wstring = std{{(.__cxx11)?}}.basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>>
2828
// CHECK-STD: }

test/Interop/Cxx/stdlib/msvcprt-module-interface.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
// CHECK-STRING: typealias size_t = size_t
1313
// CHECK-STRING: static func to_string(_ _Val: Int32) -> std.string
1414
// CHECK-STRING: static func to_wstring(_ _Val: Int32) -> std.wstring
15-
// CHECK-STRING: struct basic_string<Int8, char_traits<Int8>, allocator<Int8>> : CxxRandomAccessCollection {
15+
// CHECK-STRING: struct basic_string<CChar, char_traits<CChar>, allocator<CChar>> : CxxRandomAccessCollection {
1616
// CHECK-STRING: typealias value_type = CChar
1717
// CHECK-STRING: }
18-
// CHECK-STRING: struct basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>> : CxxRandomAccessCollection {
18+
// CHECK-STRING: struct basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>> : CxxRandomAccessCollection {
1919
// CHECK-STRING: typealias value_type = CWideChar
2020
// CHECK-STRING: }
21-
// CHECK-STRING: typealias string = std.basic_string<Int8, char_traits<Int8>, allocator<Int8>>
22-
// CHECK-STRING: typealias wstring = std.basic_string<Scalar, char_traits<Scalar>, allocator<Scalar>>
21+
// CHECK-STRING: typealias string = std.basic_string<CChar, char_traits<CChar>, allocator<CChar>>
22+
// CHECK-STRING: typealias wstring = std.basic_string<CWideChar, char_traits<CWideChar>, allocator<CWideChar>>
2323
// CHECK-STRING: }
2424

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
// CHECK: typealias RawIterator = SimpleCollectionReadOnly.iterator
1919
// CHECK: }
2020

21-
// CHECK: struct HasInheritedTemplatedConstRACIterator<Int32> : CxxRandomAccessCollection {
22-
// CHECK: typealias Element = InheritedTemplatedConstRACIterator<Int32>.Pointee
23-
// CHECK: typealias Iterator = CxxIterator<HasInheritedTemplatedConstRACIterator<Int32>>
24-
// CHECK: typealias RawIterator = InheritedTemplatedConstRACIterator<Int32>
21+
// CHECK: struct HasInheritedTemplatedConstRACIterator<CInt> : CxxRandomAccessCollection {
22+
// CHECK: typealias Element = InheritedTemplatedConstRACIterator<CInt>.Pointee
23+
// CHECK: typealias Iterator = CxxIterator<HasInheritedTemplatedConstRACIterator<CInt>>
24+
// CHECK: typealias RawIterator = InheritedTemplatedConstRACIterator<CInt>
2525
// CHECK: }
2626

27-
// CHECK: struct HasInheritedTemplatedConstRACIteratorOutOfLineOps<Int32> : CxxRandomAccessCollection {
28-
// CHECK: typealias Element = InheritedTemplatedConstRACIteratorOutOfLineOps<Int32>.Pointee
29-
// CHECK: typealias Iterator = CxxIterator<HasInheritedTemplatedConstRACIteratorOutOfLineOps<Int32>>
30-
// CHECK: typealias RawIterator = InheritedTemplatedConstRACIteratorOutOfLineOps<Int32>
27+
// CHECK: struct HasInheritedTemplatedConstRACIteratorOutOfLineOps<CInt> : CxxRandomAccessCollection {
28+
// CHECK: typealias Element = InheritedTemplatedConstRACIteratorOutOfLineOps<CInt>.Pointee
29+
// CHECK: typealias Iterator = CxxIterator<HasInheritedTemplatedConstRACIteratorOutOfLineOps<CInt>>
30+
// CHECK: typealias RawIterator = InheritedTemplatedConstRACIteratorOutOfLineOps<CInt>
3131
// CHECK: }

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,24 +86,24 @@
8686
// CHECK-NOT: struct HasNoPreIncrementOperator : UnsafeCxxInputIterator
8787
// CHECK-NOT: struct HasNoDereferenceOperator : UnsafeCxxInputIterator
8888

89-
// CHECK: struct TemplatedIterator<Int32> : UnsafeCxxInputIterator {
90-
// CHECK: func successor() -> TemplatedIterator<Int32>
89+
// CHECK: struct TemplatedIterator<CInt> : UnsafeCxxInputIterator {
90+
// CHECK: func successor() -> TemplatedIterator<CInt>
9191
// CHECK: var pointee: Int32 { get }
9292
// CHECK: typealias Pointee = Int32
93-
// CHECK: static func == (lhs: TemplatedIterator<Int32>, other: TemplatedIterator<Int32>) -> Bool
93+
// CHECK: static func == (lhs: TemplatedIterator<CInt>, other: TemplatedIterator<CInt>) -> Bool
9494
// CHECK: }
9595

96-
// CHECK: struct TemplatedIteratorOutOfLineEq<Int32> : UnsafeCxxInputIterator {
97-
// CHECK: func successor() -> TemplatedIteratorOutOfLineEq<Int32>
96+
// CHECK: struct TemplatedIteratorOutOfLineEq<CInt> : UnsafeCxxInputIterator {
97+
// CHECK: func successor() -> TemplatedIteratorOutOfLineEq<CInt>
9898
// CHECK: var pointee: Int32 { get }
9999
// CHECK: typealias Pointee = Int32
100100
// CHECK: }
101101

102-
// CHECK: struct TemplatedRACIteratorOutOfLineEq<Int32> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
103-
// CHECK: func successor() -> TemplatedRACIteratorOutOfLineEq<Int32>
102+
// CHECK: struct TemplatedRACIteratorOutOfLineEq<CInt> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
103+
// CHECK: func successor() -> TemplatedRACIteratorOutOfLineEq<CInt>
104104
// CHECK: var pointee: Int32 { get }
105105
// CHECK: typealias Pointee = Int32
106-
// CHECK: typealias Distance = TemplatedRACIteratorOutOfLineEq<Int32>.difference_type
106+
// CHECK: typealias Distance = TemplatedRACIteratorOutOfLineEq<CInt>.difference_type
107107
// CHECK: }
108108

109109
// CHECK: struct BaseIntIterator {
@@ -113,17 +113,17 @@
113113

114114
// CHECK: struct InheritedTemplatedConstIterator<T> {
115115
// CHECK: }
116-
// CHECK: struct InheritedTemplatedConstIterator<Int32> : UnsafeCxxInputIterator {
116+
// CHECK: struct InheritedTemplatedConstIterator<CInt> : UnsafeCxxInputIterator {
117117
// CHECK: }
118118

119119
// CHECK: struct InheritedTemplatedConstRACIterator<T> {
120120
// CHECK: }
121-
// CHECK: struct InheritedTemplatedConstRACIterator<Int32> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
121+
// CHECK: struct InheritedTemplatedConstRACIterator<CInt> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
122122
// CHECK: }
123123

124124
// CHECK: struct InheritedTemplatedConstRACIteratorOutOfLineOps<T> {
125125
// CHECK: }
126-
// CHECK: struct InheritedTemplatedConstRACIteratorOutOfLineOps<Int32> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
126+
// CHECK: struct InheritedTemplatedConstRACIteratorOutOfLineOps<CInt> : UnsafeCxxRandomAccessIterator, UnsafeCxxInputIterator {
127127
// CHECK: }
128128

129129
// CHECK: struct InputOutputIterator : UnsafeCxxMutableInputIterator {

0 commit comments

Comments
 (0)