From cca7e96cea5a9e660e9acf18545d9502598da8b6 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 11 Sep 2020 14:33:55 -0700 Subject: [PATCH 1/2] [lldb] Add test for CFMutableDictionaryRef While writing a test for a change in Foundation I noticed we didn't yet test CFMutableDictionaryRef. (cherry picked from commit 76e3a27c16d2a8171454cf12a33e35e3ae6f9dc2) --- .../data-formatter-objc/TestDataFormatterObjCNSContainer.py | 4 +++- .../functionalities/data-formatter/data-formatter-objc/main.m | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py b/lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py index d13d5d5df1d5b..05367c144b302 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py @@ -21,7 +21,7 @@ def test_nscontainers_with_run_command(self): def nscontainers_data_formatter_commands(self): self.expect( - 'frame variable newArray nsDictionary newDictionary nscfDictionary cfDictionaryRef newMutableDictionary cfarray_ref mutable_array_ref', + 'frame variable newArray nsDictionary newDictionary nscfDictionary cfDictionaryRef newMutableDictionary newMutableDictionaryRef cfarray_ref mutable_array_ref', substrs=[ '(NSArray *) newArray = ', ' @"50 elements"', @@ -35,6 +35,8 @@ def nscontainers_data_formatter_commands(self): ' 2 key/value pairs', '(NSDictionary *) newMutableDictionary = ', ' 21 key/value pairs', + '(CFMutableDictionaryRef) newMutableDictionaryRef = ', + ' 21 key/value pairs', '(CFArrayRef) cfarray_ref = ', ' @"3 elements"', '(CFMutableArrayRef) mutable_array_ref = ', diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m b/lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m index 169b3aed4f222..409cb0a993f9d 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m @@ -476,6 +476,8 @@ int main(int argc, const char *argv[]) { [newMutableDictionary setObject:@"foo" forKey:@"bar19"]; [newMutableDictionary setObject:@"foo" forKey:@"bar20"]; + CFMutableDictionaryRef newMutableDictionaryRef = CFDictionaryCreateMutableCopy(kCFAllocatorDefault, 0, newMutableDictionary); + id cfKeys[4] = {@"foo", @"bar", @"baz", @"quux"}; id cfValues[4] = {@"foo", @"bar", @"baz", @"quux"}; NSDictionary *nsDictionary = CFBridgingRelease( From 2fa3083f628280a092376c6a164c015859dc4177 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 11 Sep 2020 13:25:40 -0700 Subject: [PATCH 2/2] [lldb] Use GetNonKVOClassDescriptor to get the NSDictionary class descriptor On macOS Big Sur the class descriptor contains the NSKVONotifying_ prefix. This is covered by TestDataFormatterObjCKVO. Differential revision: https://reviews.llvm.org/D87545 (cherry picked from commit 33eb64704292dc2fc8585b8aa7459f96482c6cf9) --- lldb/source/Plugins/Language/ObjC/NSDictionary.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index 3dc07678f92f5..b3209160cecf0 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -388,7 +388,7 @@ bool lldb_private::formatters::NSDictionarySummaryProvider( return false; ObjCLanguageRuntime::ClassDescriptorSP descriptor( - runtime->GetClassDescriptor(valobj)); + runtime->GetNonKVOClassDescriptor(valobj)); if (!descriptor || !descriptor->IsValid()) return false;