Skip to content

Commit 6c50663

Browse files
committed
Merge branch 'swift/main' of github.com:apple/llvm-project into swift/tensorflow-stage
* 'swift/main' of github.com:apple/llvm-project: Fix compilation warnings Add a TypeSystemSwiftTypeRef::GetTupleElementName() method.
2 parents af80886 + 60a18b5 commit 6c50663

File tree

4 files changed

+62
-6
lines changed

4 files changed

+62
-6
lines changed

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,30 @@ ResolveTypeAlias(SwiftASTContext *module_holder,
203203
return {n, {}};
204204
}
205205

206+
std::string
207+
TypeSystemSwiftTypeRef::GetTupleElementName(lldb::opaque_compiler_type_t type,
208+
size_t idx) {
209+
using namespace swift::Demangle;
210+
Demangler dem;
211+
NodePointer node = TypeSystemSwiftTypeRef::DemangleCanonicalType(dem, type);
212+
if (!node || node->getKind() != Node::Kind::Tuple)
213+
return "";
214+
if (node->getNumChildren() < idx)
215+
return "";
216+
NodePointer child = node->getChild(idx);
217+
if (child->getNumChildren() != 1 &&
218+
child->getKind() != Node::Kind::TupleElement)
219+
return "";
220+
for (NodePointer name : *child) {
221+
if (name->getKind() != Node::Kind::TupleElementName)
222+
continue;
223+
return name->getText().str();
224+
}
225+
std::string name;
226+
llvm::raw_string_ostream(name) << idx;
227+
return name;
228+
}
229+
206230
swift::Demangle::NodePointer TypeSystemSwiftTypeRef::Transform(
207231
swift::Demangle::Demangler &dem, swift::Demangle::NodePointer node,
208232
std::function<swift::Demangle::NodePointer(swift::Demangle::NodePointer)>

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,10 @@ class TypeSystemSwiftTypeRef : public TypeSystemSwift {
258258
bool print_help_if_available, bool print_extensions_if_available,
259259
lldb::DescriptionLevel level = lldb::eDescriptionLevelFull) override;
260260

261+
/// Return the nth tuple element's name, if it has one.
262+
std::string GetTupleElementName(lldb::opaque_compiler_type_t type,
263+
size_t idx);
264+
261265
/// Recursively transform the demangle tree starting a \p node by
262266
/// doing a post-order traversal and replacing each node with
263267
/// fn(node).

lldb/source/Target/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,20 @@ class LLDBMemoryReader : public swift::remote::MemoryReader {
280280
bool queryDataLayout(DataLayoutQueryType type, void *inBuffer,
281281
void *outBuffer) override {
282282
switch (type) {
283+
// FIXME: add support for case DLQ_GetPtrAuthMask:
284+
case DLQ_GetObjCReservedLowBits: {
285+
auto *result = static_cast<uint8_t *>(outBuffer);
286+
auto &triple = m_process.GetTarget().GetArchitecture().GetTriple();
287+
if (triple.isMacOSX() && triple.getArch() == llvm::Triple::x86_64) {
288+
// Obj-C reserves low bit on 64-bit Intel macOS only.
289+
// Other Apple platforms don't reserve this bit (even when
290+
// running on x86_64-based simulators).
291+
*result = 1;
292+
} else {
293+
*result = 0;
294+
}
295+
break;
296+
}
283297
case DLQ_GetPointerSize: {
284298
auto result = static_cast<uint8_t *>(outBuffer);
285299
*result = m_process.GetAddressByteSize();

lldb/unittests/Symbol/TestTypeSystemSwiftTypeRef.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,15 @@ TEST_F(TestTypeSystemSwiftTypeRef, Function) {
126126
CompilerType void_void = GetCompilerType(b.Mangle(n));
127127
ASSERT_TRUE(void_void.IsFunctionType(nullptr));
128128
ASSERT_TRUE(void_void.IsFunctionPointerType());
129-
ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0);
129+
ASSERT_EQ(void_void.GetNumberOfFunctionArguments(), 0UL);
130130
}
131131
{
132132
NodePointer n = b.GlobalType(
133133
b.Node(Node::Kind::ImplFunctionType, b.Node(Node::Kind::ImplEscaping),
134134
b.Node(Node::Kind::ImplConvention, "@callee_guaranteed")));
135135
CompilerType impl_void_void = GetCompilerType(b.Mangle(n));
136136
ASSERT_TRUE(impl_void_void.IsFunctionType(nullptr));
137-
ASSERT_EQ(impl_void_void.GetNumberOfFunctionArguments(), 0);
137+
ASSERT_EQ(impl_void_void.GetNumberOfFunctionArguments(), 0UL);
138138
}
139139
{
140140
NodePointer n = b.GlobalType(b.Node(
@@ -147,7 +147,7 @@ TEST_F(TestTypeSystemSwiftTypeRef, Function) {
147147
b.Node(Node::Kind::Tuple))));
148148
CompilerType impl_two_args = GetCompilerType(b.Mangle(n));
149149
ASSERT_TRUE(impl_two_args.IsFunctionType(nullptr));
150-
ASSERT_EQ(impl_two_args.GetNumberOfFunctionArguments(), 2);
150+
ASSERT_EQ(impl_two_args.GetNumberOfFunctionArguments(), 2UL);
151151
ASSERT_EQ(impl_two_args.GetFunctionArgumentAtIndex(0), int_type);
152152
ASSERT_EQ(impl_two_args.GetFunctionArgumentAtIndex(1), void_type);
153153
ASSERT_EQ(impl_two_args.GetFunctionArgumentTypeAtIndex(0), int_type);
@@ -167,7 +167,7 @@ TEST_F(TestTypeSystemSwiftTypeRef, Function) {
167167
b.Node(Node::Kind::Type, b.Node(Node::Kind::Tuple)))));
168168
CompilerType two_args = GetCompilerType(b.Mangle(n));
169169
ASSERT_TRUE(two_args.IsFunctionType(nullptr));
170-
ASSERT_EQ(two_args.GetNumberOfFunctionArguments(), 2);
170+
ASSERT_EQ(two_args.GetNumberOfFunctionArguments(), 2UL);
171171
ASSERT_EQ(two_args.GetFunctionArgumentAtIndex(0), int_type);
172172
ASSERT_EQ(two_args.GetFunctionArgumentAtIndex(1), void_type);
173173
ASSERT_EQ(two_args.GetFunctionArgumentTypeAtIndex(0), int_type);
@@ -306,7 +306,7 @@ TEST_F(TestTypeSystemSwiftTypeRef, Scalar) {
306306
uint32_t count = 99;
307307
bool is_complex = true;
308308
ASSERT_FALSE(int_type.IsFloatingPointType(count, is_complex));
309-
ASSERT_EQ(count, 0);
309+
ASSERT_EQ(count, 0UL);
310310
ASSERT_EQ(is_complex, false);
311311
bool is_signed = true;
312312
ASSERT_TRUE(int_type.IsIntegerType(is_signed));
@@ -318,7 +318,7 @@ TEST_F(TestTypeSystemSwiftTypeRef, Scalar) {
318318
uint32_t count = 99;
319319
bool is_complex = true;
320320
ASSERT_TRUE(float_type.IsFloatingPointType(count, is_complex));
321-
ASSERT_EQ(count, 1);
321+
ASSERT_EQ(count, 1UL);
322322
ASSERT_EQ(is_complex, false);
323323
bool is_signed = true;
324324
ASSERT_FALSE(float_type.IsIntegerType(is_signed));
@@ -402,6 +402,20 @@ TEST_F(TestTypeSystemSwiftTypeRef, Tuple) {
402402
ASSERT_EQ(float_int_tuple.GetMangledTypeName(),
403403
"$ss0019BuiltinFPIEEE_CJEEdV1f_s0016BuiltinInt_gCJAcV1itD");
404404
}
405+
{
406+
NodePointer n = b.GlobalType(
407+
b.Node(Node::Kind::Tuple,
408+
b.Node(Node::Kind::TupleElement,
409+
b.Node(Node::Kind::TupleElementName, "x"), b.IntType()),
410+
b.Node(Node::Kind::TupleElement, b.IntType()),
411+
b.Node(Node::Kind::TupleElement,
412+
b.Node(Node::Kind::TupleElementName, "z"), b.IntType())));
413+
CompilerType t = GetCompilerType(b.Mangle(n));
414+
lldb::opaque_compiler_type_t o = t.GetOpaqueQualType();
415+
ASSERT_EQ(m_swift_ts.GetTupleElementName(o, 0), "x");
416+
ASSERT_EQ(m_swift_ts.GetTupleElementName(o, 1), "1");
417+
ASSERT_EQ(m_swift_ts.GetTupleElementName(o, 2), "z");
418+
}
405419
}
406420

407421
TEST_F(TestTypeSystemSwiftTypeRef, TypeClass) {

0 commit comments

Comments
 (0)