Skip to content

Commit 231fa1b

Browse files
authored
Merge pull request #40276 from bro4all/eng-PR_SR-14031_pointer_type_fix
Eng pr sr 14031 pointer type fix
2 parents b1eb438 + 35f8461 commit 231fa1b

File tree

4 files changed

+7
-6
lines changed

4 files changed

+7
-6
lines changed

lib/ClangImporter/ImportType.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1907,11 +1907,9 @@ ParameterList *ClangImporter::Implementation::importFunctionParameterList(
19071907
Type swiftParamTy;
19081908
bool isParamTypeImplicitlyUnwrapped = false;
19091909
bool isInOut = false;
1910-
1911-
auto referenceType = dyn_cast<clang::ReferenceType>(paramTy);
1912-
if (referenceType &&
1913-
isa<clang::TemplateTypeParmType>(referenceType->getPointeeType())) {
1914-
auto pointeeType = referenceType->getPointeeType();
1910+
if ((isa<clang::ReferenceType>(paramTy) || isa<clang::PointerType>(paramTy)) &&
1911+
isa<clang::TemplateTypeParmType>(paramTy->getPointeeType())) {
1912+
auto pointeeType = paramTy->getPointeeType();
19151913
auto templateParamType = cast<clang::TemplateTypeParmType>(pointeeType);
19161914
PointerTypeKind pointerKind = pointeeType.getQualifiers().hasConst()
19171915
? PTK_UnsafePointer

test/Interop/Cxx/templates/Inputs/function-templates.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ template <class T> void constLvalueReference(const T &) {}
6161

6262
template <class T> void forwardingReference(T &&) {}
6363

64+
template <class T> void PointerTemplateParameter(T*){}
65+
6466
namespace Orbiters {
6567

6668
template<class T>

test/Interop/Cxx/templates/defaulted-template-type-parameter-module-interface.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
// CHECK: func defaultedTemplateReferenceTypeParam<T>(_ t: UnsafeMutablePointer<T>)
1818
// The following types aren't imported correctly, but that does not have to do
1919
// with the fact that the template type paramaters are defaulted.
20-
// CHECK: func defaultedTemplatePointerTypeParam<T>(_ t: OpaquePointer!)
20+
// CHECK: func defaultedTemplatePointerTypeParam<T>(_ t: UnsafeMutablePointer<T>)
2121
// CHECK: func defaultedTemplatePointerReferenceTypeParam<T>(_ t: inout OpaquePointer!)
2222
// CHECK: func defaultedTemplatePointerPointerTypeParam<T>(_ t: UnsafeMutablePointer<OpaquePointer?>!)

test/Interop/Cxx/templates/function-template-module-interface.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// CHECK: func lvalueReference<T>(_ ref: UnsafeMutablePointer<T>)
1818
// CHECK: func constLvalueReference<T>(_: UnsafePointer<T>)
1919
// CHECK: func forwardingReference<T>(_: UnsafeMutablePointer<T>)
20+
// CHECK: func PointerTemplateParameter<T>(_: UnsafeMutablePointer<T>)
2021

2122
// CHECK: enum Orbiters {
2223
// CHECK: static func galileo<T>(_: T)

0 commit comments

Comments
 (0)