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