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