Fridays llvm/clang/lldb & ObjectDescription

After updating lldb (and clang/llvm) to latest I noticed that I get back a different value for an NSString* than I used to, I used to get:

now I get :

Also the object description property returns null because it doesn't consider eTypeClassObjCInterface to be a pointer. I looked at the generated debug info which looks fine (and the system lldb on osx works fine too):

0x00000159: TAG_variable [7]
                          AT_location( fbreg +120 )
                          AT_name( "qwert" )
                          AT_decl_file( "c:\projects\oxygene\testcases\work/issuedebugsilver_1.pas" )
                          AT_decl_line( 8 )
                          AT_type( {0x00000298} ( NSString* ) )

0x00000298: TAG_pointer_type [9]
                  AT_type( {0x0000029d} ( NSString ) )

0x0000029d: TAG_structure_type [10] *
                  AT_name( "NSString" )
                  AT_byte_size( 0x08 )
                  AT_APPLE_runtime_class( 0x10 )

0x000002a4: TAG_inheritance [11]
                      AT_type( {0x000002ab} ( NSObject ) )
                      AT_data_member_location( 0x00 )

0x000002aa: NULL

Am i missing something obvious, or is there something broken in lldb?

dwarf.txt (15.8 KB)

I would expect you would get eTypeClassObjCObjectPointer.

I debugged the lldb/test/lang/objc/foundation binary:

% cd lldb/test/lang/objc/foundation
% make
% lldb a.out
(lldb) b main.m:70
(lldb) r
   69 NSString *str = [NSString stringWithFormat:@"Hello from '%s'", program];
-> 70 NSLog(@"NSString instance: %@", str);
   71 printf("str = '%s'\n", [str cStringUsingEncoding: [NSString defaultCStringEncoding]]);
   72 printf("[str length] = %zu\n", (size_t)[str length]);
   73 printf("[str description] = %s\n", [[str description] UTF8String]);
(lldb) script v = lldb.frame.FindVariable("str")
(lldb) script print v
(NSString *) str = 0x0000000100200380 @"Hello from '/Volumes/work/gclayton/Documents/src/lldb/trunk/test/lang/objc/foundation/a.out'"
(lldb) script print v.GetType().GetTypeClass()
(lldb) p/x 2048
(int) $2 = 0x00000800

This is eTypeClassObjCObjectPointer as expected. If you dereference the item:

(lldb) script vd = v.Dereference()
(lldb) script print vd.GetType().GetTypeClass()
(lldb) p/x 1024
(int) $4 = 0x00000400

This is eTypeClassObjCInterface as expected.