Skip to content

Commit 906a209

Browse files
committed
[cxx-interop] Fix template parameter printing scheme for const types
1 parent a6458c7 commit 906a209

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

lib/ClangImporter/ClangClassTemplateNamePrinter.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,11 @@ struct TemplateArgumentPrinter
179179
void VisitTypeTemplateArgument(const clang::TemplateArgument &arg,
180180
llvm::raw_svector_ostream &buffer) {
181181
auto ty = arg.getAsType();
182+
if (ty.isConstQualified())
183+
buffer << "__cxxConst<";
182184
buffer << typePrinter.Visit(ty.getTypePtr());
183-
if (ty.isConstQualified()) {
184-
buffer << "_const";
185-
}
185+
if (ty.isConstQualified())
186+
buffer << ">";
186187
}
187188

188189
void VisitIntegralTemplateArgument(const clang::TemplateArgument &arg,

test/Interop/Cxx/templates/Inputs/class-template-with-primitive-argument.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,15 @@ typedef DoubleWrapper<MagicWrapper<int[42]>> DoubleWrappedMagicIntFixedSizeArr1;
3838
typedef DoubleWrapper<MagicWrapper<int[43]>> DoubleWrappedMagicIntFixedSizeArr2;
3939
typedef DoubleWrapper<MagicWrapper<std::nullptr_t>> DoubleWrappedMagicNullPtr;
4040

41+
typedef DoubleWrapper<const MagicWrapper<int>> DoubleConstWrappedInt;
42+
typedef DoubleWrapper<const MagicWrapper<const int>> DoubleConstWrappedIntConst;
43+
typedef DoubleWrapper<const MagicWrapper<const long>> DoubleConstWrappedLongConst;
44+
typedef DoubleWrapper<const MagicWrapper<int*>> DoubleConstWrappedIntPtr;
45+
typedef DoubleWrapper<const MagicWrapper<const int*>> DoubleConstWrappedIntConstPtr;
46+
typedef DoubleWrapper<const MagicWrapper<int[]>> DoubleConstWrappedMagicIntArr;
47+
typedef DoubleWrapper<const MagicWrapper<long[]>> DoubleConstWrappedMagicLongArr;
48+
typedef DoubleWrapper<const MagicWrapper<int[42]>> DoubleConstWrappedMagicIntFixedSizeArr1;
49+
typedef DoubleWrapper<const MagicWrapper<int[43]>> DoubleConstWrappedMagicIntFixedSizeArr2;
50+
typedef DoubleWrapper<const MagicWrapper<std::nullptr_t>> DoubleConstWrappedMagicNullPtr;
51+
4152
#endif // TEST_INTEROP_CXX_TEMPLATES_INPUTS_CLASS_TEMPLATE_WITH_PRIMITIVE_ARGUMENT_H

test/Interop/Cxx/templates/class-template-with-primitive-argument-module-interface.swift

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
// CHECK: }
99

1010
// CHECK: typealias WrappedMagicInt = MagicWrapper<CInt>
11-
// CHECK: typealias WrappedMagicIntConst = MagicWrapper<CInt_const>
12-
// CHECK: typealias WrappedMagicLongConst = MagicWrapper<CLong_const>
11+
// CHECK: typealias WrappedMagicIntConst = MagicWrapper<__cxxConst<CInt>>
12+
// CHECK: typealias WrappedMagicLongConst = MagicWrapper<__cxxConst<CLong>>
1313
// CHECK: typealias WrappedMagicIntPtr = MagicWrapper<UnsafeMutablePointer<CInt>>
1414
// CHECK: typealias WrappedMagicIntConstPtr = MagicWrapper<UnsafePointer<CInt>>
1515
// CHECK: typealias WrappedMagicIntPtrPtr = MagicWrapper<UnsafeMutablePointer<UnsafeMutablePointer<CInt>>>
@@ -20,12 +20,23 @@
2020
// CHECK: typealias WrappedMagicNullPtr = MagicWrapper<nil>
2121

2222
// CHECK: typealias DoubleWrappedInt = DoubleWrapper<MagicWrapper<CInt>>
23-
// CHECK: typealias DoubleWrappedIntConst = DoubleWrapper<MagicWrapper<CInt_const>>
24-
// CHECK: typealias DoubleWrappedLongConst = DoubleWrapper<MagicWrapper<CLong_const>>
23+
// CHECK: typealias DoubleWrappedIntConst = DoubleWrapper<MagicWrapper<__cxxConst<CInt>>>
24+
// CHECK: typealias DoubleWrappedLongConst = DoubleWrapper<MagicWrapper<__cxxConst<CLong>>>
2525
// CHECK: typealias DoubleWrappedIntPtr = DoubleWrapper<MagicWrapper<UnsafeMutablePointer<CInt>>>
2626
// CHECK: typealias DoubleWrappedIntConstPtr = DoubleWrapper<MagicWrapper<UnsafePointer<CInt>>>
2727
// CHECK: typealias DoubleWrappedMagicIntArr = DoubleWrapper<MagicWrapper<[CInt]>>
2828
// CHECK: typealias DoubleWrappedMagicLongArr = DoubleWrapper<MagicWrapper<[CLong]>>
2929
// CHECK: typealias DoubleWrappedMagicIntFixedSizeArr1 = DoubleWrapper<MagicWrapper<Vector<CInt, 42>>>
3030
// CHECK: typealias DoubleWrappedMagicIntFixedSizeArr2 = DoubleWrapper<MagicWrapper<Vector<CInt, 43>>>
3131
// CHECK: typealias DoubleWrappedMagicNullPtr = DoubleWrapper<MagicWrapper<nil>>
32+
33+
// CHECK: typealias DoubleConstWrappedInt = DoubleWrapper<__cxxConst<MagicWrapper<CInt>>>
34+
// CHECK: typealias DoubleConstWrappedIntConst = DoubleWrapper<__cxxConst<MagicWrapper<__cxxConst<CInt>>>>
35+
// CHECK: typealias DoubleConstWrappedLongConst = DoubleWrapper<__cxxConst<MagicWrapper<__cxxConst<CLong>>>>
36+
// CHECK: typealias DoubleConstWrappedIntPtr = DoubleWrapper<__cxxConst<MagicWrapper<UnsafeMutablePointer<CInt>>>>
37+
// CHECK: typealias DoubleConstWrappedIntConstPtr = DoubleWrapper<__cxxConst<MagicWrapper<UnsafePointer<CInt>>>>
38+
// CHECK: typealias DoubleConstWrappedMagicIntArr = DoubleWrapper<__cxxConst<MagicWrapper<[CInt]>>>
39+
// CHECK: typealias DoubleConstWrappedMagicLongArr = DoubleWrapper<__cxxConst<MagicWrapper<[CLong]>>>
40+
// CHECK: typealias DoubleConstWrappedMagicIntFixedSizeArr1 = DoubleWrapper<__cxxConst<MagicWrapper<Vector<CInt, 42>>>>
41+
// CHECK: typealias DoubleConstWrappedMagicIntFixedSizeArr2 = DoubleWrapper<__cxxConst<MagicWrapper<Vector<CInt, 43>>>>
42+
// CHECK: typealias DoubleConstWrappedMagicNullPtr = DoubleWrapper<__cxxConst<MagicWrapper<nil>>>

0 commit comments

Comments
 (0)