1import lldb 2from lldbsuite.test.decorators import * 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test import lldbutil 5 6class TestBitfieldIvars(TestBase): 7 8 9 def test(self): 10 self.build() 11 lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.m")) 12 13 self.expect_expr("chb->hb->field1", result_type="unsigned int", result_value="0") 14 ## This should happen second 15 self.expect_expr("chb->hb->field2", result_type="unsigned int", result_value="1") 16 17 self.expect_expr("hb2->field1", result_type="unsigned int", result_value="10") 18 self.expect_expr("hb2->field2", result_type="unsigned int", result_value="3") 19 self.expect_expr("hb2->field3", result_type="unsigned int", result_value="4") 20 21 self.expect("frame var *hb2", substrs = [ 'x =', '100', 22 'field1 =', '10', 23 'field2 =', '3', 24 'field3 =', '4']) 25 26 self.expect_expr('myField', result_type="UCBitFields", 27 result_children=[ 28 ValueCheck(name="fieldOne", value="'\\0'"), 29 ValueCheck(name="fieldTwo", value="'\\x01'"), 30 ValueCheck(name="fieldThree", value="'\\0'"), 31 ValueCheck(name="fieldFour", value="'\\0'"), 32 ValueCheck(name="fieldFive", value="'\\x01'") 33 ]) 34 35 # This test is meant to be xfailed, but running the test triggers an ASan 36 # issue, so it must be skipped for now. 37 @skipIf 38 def testExprWholeObject(self): 39 self.build() 40 lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.m")) 41 42 ## FIXME expression with individual bit-fields obtains correct values but not with the whole object 43 self.expect("expr *hb2", substrs = [ 'x =', '100', 44 'field1 =', '10', 45 'field2 =', '3', 46 'field3 =', '4']) 47