diff --git a/lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp b/lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp index fc1ad7b8421b4..96e756dbb01d9 100644 --- a/lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp +++ b/lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp @@ -3056,9 +3056,8 @@ bool TypeSystemSwiftTypeRef::IsFunctionType(opaque_compiler_type_t type) { using namespace swift::Demangle; Demangler dem; NodePointer node = DemangleCanonicalOutermostType(dem, type); - // Note: There are a number of other candidates, and this list may need - // updating. Ex: `NoEscapeFunctionType`, `ThinFunctionType`, etc. return node && (node->getKind() == Node::Kind::FunctionType || + node->getKind() == Node::Kind::ThinFunctionType || node->getKind() == Node::Kind::NoEscapeFunctionType || node->getKind() == Node::Kind::ImplFunctionType); }; diff --git a/lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp b/lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp index e1dfa01354a19..ba98e61f487f3 100644 --- a/lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp +++ b/lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp @@ -148,6 +148,18 @@ TEST_F(TestTypeSystemSwiftTypeRef, Function) { ASSERT_TRUE(void_void.IsFunctionPointerType()); ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0UL); } + { + NodePointer n = b.GlobalType( + b.Node(Node::Kind::ThinFunctionType, + b.Node(Node::Kind::ArgumentTuple, + b.Node(Node::Kind::Type, b.Node(Node::Kind::Tuple))), + b.Node(Node::Kind::ReturnType, + b.Node(Node::Kind::Type, b.Node(Node::Kind::Tuple))))); + CompilerType void_void = GetCompilerType(b.Mangle(n)); + ASSERT_TRUE(void_void.IsFunctionType()); + ASSERT_TRUE(void_void.IsFunctionPointerType()); + ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0UL); + } { NodePointer n = b.GlobalType( b.Node(Node::Kind::ImplFunctionType, b.Node(Node::Kind::ImplEscaping),