xref: /llvm-project/lldb/test/API/lang/cpp/bitfields/TestCppBitfields.py (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1"""Show bitfields and check that they display correctly."""
2
3import lldb
4from lldbsuite.test.decorators import *
5from lldbsuite.test.lldbtest import *
6from lldbsuite.test import lldbutil
7
8
9class CppBitfieldsTestCase(TestBase):
10
11    mydir = TestBase.compute_mydir(__file__)
12
13    def setUp(self):
14        # Call super's setUp().
15        TestBase.setUp(self)
16        # Find the line number to break inside main().
17        self.line = line_number('main.cpp', '// Set break point at this line.')
18
19    # BitFields exhibit crashes in record layout on Windows
20    # (http://llvm.org/pr21800)
21    @skipIfWindows
22    def test_and_run_command(self):
23        """Test 'frame variable ...' on a variable with bitfields."""
24        self.build()
25
26        lldbutil.run_to_source_breakpoint(self, '// Set break point at this line.',
27          lldb.SBFileSpec("main.cpp", False))
28
29        # The stop reason of the thread should be breakpoint.
30        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
31                    substrs=['stopped',
32                             'stop reason = breakpoint'])
33
34        # The breakpoint should have a hit count of 1.
35        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
36                    substrs=[' resolved, hit count = 1'])
37
38        self.expect("expr (lba.a)", VARIABLES_DISPLAYED_CORRECTLY,
39                    substrs=['unsigned int', '2'])
40        self.expect("expr (lbb.b)", VARIABLES_DISPLAYED_CORRECTLY,
41                    substrs=['unsigned int', '3'])
42        self.expect("expr (lbc.c)", VARIABLES_DISPLAYED_CORRECTLY,
43                    substrs=['unsigned int', '4'])
44        self.expect("expr (lbd.a)", VARIABLES_DISPLAYED_CORRECTLY,
45                    substrs=['unsigned int', '5'])
46        self.expect("expr (clang_example.f.a)", VARIABLES_DISPLAYED_CORRECTLY,
47                    substrs=['uint64_t', '1'])
48
49        self.expect(
50            "frame variable --show-types lba",
51            VARIABLES_DISPLAYED_CORRECTLY,
52            substrs=[
53                '(int:32)  = ',
54                '(unsigned int:20) a = 2',
55                ])
56
57        self.expect(
58            "frame variable --show-types lbb",
59            VARIABLES_DISPLAYED_CORRECTLY,
60            substrs=[
61                '(unsigned int:1) a = 1',
62                '(int:31)  =',
63                '(unsigned int:20) b = 3',
64                ])
65
66        self.expect(
67            "frame variable --show-types lbc",
68            VARIABLES_DISPLAYED_CORRECTLY,
69            substrs=[
70                '(int:22)  =',
71                '(unsigned int:1) a = 1',
72                '(unsigned int:1) b = 0',
73                '(unsigned int:5) c = 4',
74                '(unsigned int:1) d = 1',
75                '(int:2)  =',
76                '(unsigned int:20) e = 20',
77                ])
78
79        self.expect(
80            "frame variable --show-types lbd",
81            VARIABLES_DISPLAYED_CORRECTLY,
82            substrs=[
83                '(char [3]) arr = "ab"',
84                '(int:32)  =',
85                '(unsigned int:20) a = 5',
86                ])
87
88        self.expect(
89            "frame variable --show-types clang_example",
90            VARIABLES_DISPLAYED_CORRECTLY,
91            substrs=[
92                   '(int:22)  =',
93                   '(uint64_t:1) a = 1',
94                   '(uint64_t:1) b = 0',
95                   '(uint64_t:1) c = 1',
96                   '(uint64_t:1) d = 0',
97                   '(uint64_t:1) e = 1',
98                   '(uint64_t:1) f = 0',
99                   '(uint64_t:1) g = 1',
100                   '(uint64_t:1) h = 0',
101                   '(uint64_t:1) i = 1',
102                   '(uint64_t:1) j = 0',
103                   '(uint64_t:1) k = 1',
104                ])
105
106