[Lldb-commits] [lldb] b8ff0da - [lldb] Fix NSArray0 data formatter and add test
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Aug 10 09:38:46 PDT 2020
Author: Jonas Devlieghere
Date: 2020-08-10T09:38:37-07:00
New Revision: b8ff0daeac0752689ffca9345686845d1b7cfed8
URL: https://github.com/llvm/llvm-project/commit/b8ff0daeac0752689ffca9345686845d1b7cfed8
DIFF: https://github.com/llvm/llvm-project/commit/b8ff0daeac0752689ffca9345686845d1b7cfed8.diff
LOG: [lldb] Fix NSArray0 data formatter and add test
Fixes PR47089
Added:
Modified:
lldb/source/Plugins/Language/ObjC/NSArray.cpp
lldb/test/API/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
lldb/test/API/functionalities/data-formatter/nsarraysynth/main.m
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
index 8d648d8a0861..26dea77c2e49 100644
--- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
@@ -96,7 +96,7 @@ class GenericNSArrayMSyntheticFrontEnd : public NSArrayMSyntheticFrontEndBase {
D32 *m_data_32;
D64 *m_data_64;
};
-
+
namespace Foundation1010 {
namespace {
struct DataDescriptor_32 {
@@ -107,7 +107,7 @@ namespace Foundation1010 {
uint32_t _priv2;
uint32_t _data;
};
-
+
struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
@@ -117,11 +117,11 @@ namespace Foundation1010 {
uint64_t _data;
};
}
-
+
using NSArrayMSyntheticFrontEnd =
GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
}
-
+
namespace Foundation1428 {
namespace {
struct DataDescriptor_32 {
@@ -130,7 +130,7 @@ namespace Foundation1428 {
uint32_t _size;
uint32_t _data;
};
-
+
struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
@@ -138,11 +138,11 @@ namespace Foundation1428 {
uint64_t _data;
};
}
-
+
using NSArrayMSyntheticFrontEnd =
GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
}
-
+
namespace Foundation1437 {
template <typename PtrType>
struct DataDescriptor {
@@ -154,11 +154,11 @@ namespace Foundation1437 {
uint32_t _muts;
uint32_t _used;
};
-
+
using NSArrayMSyntheticFrontEnd =
GenericNSArrayMSyntheticFrontEnd<
DataDescriptor<uint32_t>, DataDescriptor<uint64_t>>;
-
+
template <typename DD>
uint64_t
__NSArrayMSize_Impl(lldb_private::Process &process,
@@ -173,7 +173,7 @@ namespace Foundation1437 {
}
return descriptor._used;
}
-
+
uint64_t
__NSArrayMSize(lldb_private::Process &process, lldb::addr_t valobj_addr,
Status &error) {
@@ -227,23 +227,23 @@ class GenericNSArrayISyntheticFrontEnd : public SyntheticChildrenFrontEnd {
private:
ExecutionContextRef m_exe_ctx_ref;
uint8_t m_ptr_size;
-
+
D32 *m_data_32;
D64 *m_data_64;
CompilerType m_id_type;
};
-
+
namespace Foundation1300 {
struct IDD32 {
uint32_t used;
uint32_t list;
};
-
+
struct IDD64 {
uint64_t used;
uint64_t list;
};
-
+
using NSArrayISyntheticFrontEnd =
GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, true>;
}
@@ -258,18 +258,18 @@ namespace Foundation1436 {
uint32_t used;
uint32_t list; // in Inline cases, this is the first element
};
-
+
struct IDD64 {
uint64_t used;
uint64_t list; // in Inline cases, this is the first element
};
-
+
using NSArrayI_TransferSyntheticFrontEnd =
GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, false>;
using NSArrayISyntheticFrontEnd =
GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, true>;
-
+
using NSFrozenArrayMSyntheticFrontEnd =
Foundation1437::NSArrayMSyntheticFrontEnd;
@@ -820,11 +820,9 @@ lldb_private::formatters::NSArraySyntheticFrontEndCreator(
return (new Foundation1436::NSArrayISyntheticFrontEnd(valobj_sp));
if (runtime->GetFoundationVersion() >= 1430)
return (new Foundation1430::NSArrayISyntheticFrontEnd(valobj_sp));
- else
- return (new Foundation1300::NSArrayISyntheticFrontEnd(valobj_sp));
+ return (new Foundation1300::NSArrayISyntheticFrontEnd(valobj_sp));
} else if (class_name == g_NSArrayI_Transfer) {
return (new Foundation1436::NSArrayI_TransferSyntheticFrontEnd(valobj_sp));
- } else if (class_name == g_NSArray0) {
} else if (class_name == g_NSFrozenArrayM) {
return (new Foundation1436::NSFrozenArrayMSyntheticFrontEnd(valobj_sp));
} else if (class_name == g_NSArray0) {
diff --git a/lldb/test/API/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py b/lldb/test/API/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
index 466eb5d5b7f3..a9b96bb02a8d 100644
--- a/lldb/test/API/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
+++ b/lldb/test/API/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
@@ -51,6 +51,8 @@ def cleanup():
substrs=['@"6 elements"'])
self.expect('frame variable other_arr',
substrs=['@"4 elements"'])
+ self.expect('frame variable empty_arr',
+ substrs=['@"0 elements"'])
self.expect(
'frame variable arr --ptr-depth 1',
substrs=[
@@ -69,6 +71,10 @@ def cleanup():
'[1] = 0x',
'[2] = 0x',
'[3] = 0x'])
+ self.expect(
+ 'frame variable empty_arr --ptr-depth 1',
+ substrs=[
+ '@"0 elements"'])
self.expect(
'frame variable arr --ptr-depth 1 -d no-run-target',
substrs=[
@@ -104,3 +110,6 @@ def cleanup():
self.assertTrue(
self.frame().FindVariable("other_arr").MightHaveChildren(),
"arr says it does not have children!")
+ self.assertFalse(
+ self.frame().FindVariable("empty_arr").MightHaveChildren(),
+ "arr says it does have children!")
diff --git a/lldb/test/API/functionalities/data-formatter/nsarraysynth/main.m b/lldb/test/API/functionalities/data-formatter/nsarraysynth/main.m
index cdb612f67f09..4a267706a093 100644
--- a/lldb/test/API/functionalities/data-formatter/nsarraysynth/main.m
+++ b/lldb/test/API/functionalities/data-formatter/nsarraysynth/main.m
@@ -2,7 +2,7 @@
int main (int argc, const char * argv[])
{
-
+
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
@@ -19,6 +19,7 @@ int main (int argc, const char * argv[])
NSString *aString = @"a string";
NSArray *other_arr = [NSArray arrayWithObjects:aDate, aValue, aString, arr, nil];
+ NSArray *empty_arr = @[];
[pool drain];// Set break point at this line.
return 0;
More information about the lldb-commits
mailing list