Index: lldb/source/Plugins/Language/ObjC/Cocoa.cpp =================================================================== --- lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -1035,7 +1035,7 @@ if (!real_guy_sp) return false; } - uint8_t value = (real_guy_sp->GetValueAsUnsigned(0) & 0xFF); + uint8_t value = (real_guy_sp->GetValueAsSigned(0) & 0xFF); switch (value) { case 0: stream.Printf("NO"); Index: lldb/test/API/functionalities/data-formatter/boolreference/TestFormattersBoolRefPtr.py =================================================================== --- lldb/test/API/functionalities/data-formatter/boolreference/TestFormattersBoolRefPtr.py +++ lldb/test/API/functionalities/data-formatter/boolreference/TestFormattersBoolRefPtr.py @@ -75,3 +75,6 @@ substrs=['NO']) if not(isArm): self.expect('frame variable unset', substrs=['12']) + + self.expect('p myField', + substrs=['(BoolBitFields)', 'fieldOne = NO', 'fieldTwo = 255', 'fieldThree = NO', 'fieldFour = NO', 'fieldfive = 255']) Index: lldb/test/API/functionalities/data-formatter/boolreference/main.mm =================================================================== --- lldb/test/API/functionalities/data-formatter/boolreference/main.mm +++ lldb/test/API/functionalities/data-formatter/boolreference/main.mm @@ -1,12 +1,20 @@ #import +typedef struct { + BOOL fieldOne : 1; + BOOL fieldTwo : 1; + BOOL fieldThree : 1; + BOOL fieldFour : 1; + BOOL fieldfive : 1; +} BoolBitFields; + int main (int argc, const char * argv[]) { - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; BOOL yes = YES; BOOL no = NO; - BOOL unset = 12; + BOOL unset = 12; BOOL &yes_ref = yes; BOOL &no_ref = no; @@ -16,6 +24,10 @@ BOOL* no_ptr = &no; BOOL* unset_ptr = &unset; + BoolBitFields myField = {0}; + myField.fieldTwo = YES; + myField.fieldfive = YES; + [pool drain];// Set break point at this line. return 0; } Index: lldb/test/API/lang/objc/bitfield_ivars/TestBitfieldIvars.py =================================================================== --- lldb/test/API/lang/objc/bitfield_ivars/TestBitfieldIvars.py +++ lldb/test/API/lang/objc/bitfield_ivars/TestBitfieldIvars.py @@ -24,6 +24,8 @@ 'field1 =', '10', 'field2 =', '3', 'field3 =', '4']) + self.expect('p myField', + substrs=['(UCBitFields)', 'fieldOne = \'\\0\'', 'fieldTwo = \'\\x01\'', 'fieldThree = \'\\0\'', 'fieldFour = \'\\0\'', 'fieldfive = \'\\x01\'']) # This test is meant to be xfailed, but running the test triggers an ASan # issue, so it must be skipped for now. Index: lldb/test/API/lang/objc/bitfield_ivars/main.m =================================================================== --- lldb/test/API/lang/objc/bitfield_ivars/main.m +++ lldb/test/API/lang/objc/bitfield_ivars/main.m @@ -1,5 +1,13 @@ #import +typedef struct { + unsigned char fieldOne : 1; + unsigned char fieldTwo : 1; + unsigned char fieldThree : 1; + unsigned char fieldFour : 1; + unsigned char fieldfive : 1; +} UCBitFields; + @interface HasBitfield : NSObject { @public unsigned field1 : 1; @@ -59,6 +67,10 @@ hb2->field2 = 3; hb2->field3 = 4; + UCBitFields myField = {0}; + myField.fieldTwo = 1; + myField.fieldfive = 1; + return 0; // break here }