199451b44SJordan Rupprecht"""Show bitfields and check that they display correctly.""" 299451b44SJordan Rupprecht 399451b44SJordan Rupprechtimport lldb 499451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 599451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 699451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 799451b44SJordan Rupprecht 899451b44SJordan Rupprecht 999451b44SJordan Rupprechtclass CppBitfieldsTestCase(TestBase): 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht def setUp(self): 1499451b44SJordan Rupprecht # Call super's setUp(). 1599451b44SJordan Rupprecht TestBase.setUp(self) 1699451b44SJordan Rupprecht # Find the line number to break inside main(). 1799451b44SJordan Rupprecht self.line = line_number('main.cpp', '// Set break point at this line.') 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht # BitFields exhibit crashes in record layout on Windows 2099451b44SJordan Rupprecht # (http://llvm.org/pr21800) 2199451b44SJordan Rupprecht @skipIfWindows 2299451b44SJordan Rupprecht def test_and_run_command(self): 2399451b44SJordan Rupprecht """Test 'frame variable ...' on a variable with bitfields.""" 2499451b44SJordan Rupprecht self.build() 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht lldbutil.run_to_source_breakpoint(self, '// Set break point at this line.', 2799451b44SJordan Rupprecht lldb.SBFileSpec("main.cpp", False)) 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 3099451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 3199451b44SJordan Rupprecht substrs=['stopped', 3299451b44SJordan Rupprecht 'stop reason = breakpoint']) 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht # The breakpoint should have a hit count of 1. 3599451b44SJordan Rupprecht self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE, 3699451b44SJordan Rupprecht substrs=[' resolved, hit count = 1']) 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht self.expect("expr (lba.a)", VARIABLES_DISPLAYED_CORRECTLY, 3999451b44SJordan Rupprecht substrs=['unsigned int', '2']) 4099451b44SJordan Rupprecht self.expect("expr (lbb.b)", VARIABLES_DISPLAYED_CORRECTLY, 4199451b44SJordan Rupprecht substrs=['unsigned int', '3']) 4299451b44SJordan Rupprecht self.expect("expr (lbc.c)", VARIABLES_DISPLAYED_CORRECTLY, 4399451b44SJordan Rupprecht substrs=['unsigned int', '4']) 4499451b44SJordan Rupprecht self.expect("expr (lbd.a)", VARIABLES_DISPLAYED_CORRECTLY, 4599451b44SJordan Rupprecht substrs=['unsigned int', '5']) 4699451b44SJordan Rupprecht self.expect("expr (clang_example.f.a)", VARIABLES_DISPLAYED_CORRECTLY, 4799451b44SJordan Rupprecht substrs=['uint64_t', '1']) 4899451b44SJordan Rupprecht 49*bae9aedbSshafik self.expect("expr uwbf", 50*bae9aedbSshafik substrs=['a = 255', 51*bae9aedbSshafik 'b = 65535', 52*bae9aedbSshafik 'c = 4294967295', 53*bae9aedbSshafik 'x = 4294967295'] ) 54*bae9aedbSshafik 55*bae9aedbSshafik self.expect("expr uwubf", 56*bae9aedbSshafik substrs=['a = 16777215', 57*bae9aedbSshafik 'x = 4294967295'] ) 58*bae9aedbSshafik 5999451b44SJordan Rupprecht self.expect( 6099451b44SJordan Rupprecht "frame variable --show-types lba", 6199451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 6299451b44SJordan Rupprecht substrs=[ 6399451b44SJordan Rupprecht '(int:32) = ', 6499451b44SJordan Rupprecht '(unsigned int:20) a = 2', 6599451b44SJordan Rupprecht ]) 6699451b44SJordan Rupprecht 6799451b44SJordan Rupprecht self.expect( 6899451b44SJordan Rupprecht "frame variable --show-types lbb", 6999451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 7099451b44SJordan Rupprecht substrs=[ 7199451b44SJordan Rupprecht '(unsigned int:1) a = 1', 7299451b44SJordan Rupprecht '(int:31) =', 7399451b44SJordan Rupprecht '(unsigned int:20) b = 3', 7499451b44SJordan Rupprecht ]) 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht self.expect( 7799451b44SJordan Rupprecht "frame variable --show-types lbc", 7899451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 7999451b44SJordan Rupprecht substrs=[ 8099451b44SJordan Rupprecht '(int:22) =', 8199451b44SJordan Rupprecht '(unsigned int:1) a = 1', 8299451b44SJordan Rupprecht '(unsigned int:1) b = 0', 8399451b44SJordan Rupprecht '(unsigned int:5) c = 4', 8499451b44SJordan Rupprecht '(unsigned int:1) d = 1', 8599451b44SJordan Rupprecht '(int:2) =', 8699451b44SJordan Rupprecht '(unsigned int:20) e = 20', 8799451b44SJordan Rupprecht ]) 8899451b44SJordan Rupprecht 8999451b44SJordan Rupprecht self.expect( 9099451b44SJordan Rupprecht "frame variable --show-types lbd", 9199451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 9299451b44SJordan Rupprecht substrs=[ 9399451b44SJordan Rupprecht '(char [3]) arr = "ab"', 9499451b44SJordan Rupprecht '(int:32) =', 9599451b44SJordan Rupprecht '(unsigned int:20) a = 5', 9699451b44SJordan Rupprecht ]) 9799451b44SJordan Rupprecht 9899451b44SJordan Rupprecht self.expect( 9999451b44SJordan Rupprecht "frame variable --show-types clang_example", 10099451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 10199451b44SJordan Rupprecht substrs=[ 10299451b44SJordan Rupprecht '(int:22) =', 10399451b44SJordan Rupprecht '(uint64_t:1) a = 1', 10499451b44SJordan Rupprecht '(uint64_t:1) b = 0', 10599451b44SJordan Rupprecht '(uint64_t:1) c = 1', 10699451b44SJordan Rupprecht '(uint64_t:1) d = 0', 10799451b44SJordan Rupprecht '(uint64_t:1) e = 1', 10899451b44SJordan Rupprecht '(uint64_t:1) f = 0', 10999451b44SJordan Rupprecht '(uint64_t:1) g = 1', 11099451b44SJordan Rupprecht '(uint64_t:1) h = 0', 11199451b44SJordan Rupprecht '(uint64_t:1) i = 1', 11299451b44SJordan Rupprecht '(uint64_t:1) j = 0', 11399451b44SJordan Rupprecht '(uint64_t:1) k = 1', 11499451b44SJordan Rupprecht ]) 11599451b44SJordan Rupprecht 11600c8120aSshafik self.expect( 11700c8120aSshafik "frame variable --show-types derived", 11800c8120aSshafik VARIABLES_DISPLAYED_CORRECTLY, 11900c8120aSshafik substrs=[ 12000c8120aSshafik '(uint32_t) b_a = 2', 12100c8120aSshafik '(uint32_t:1) d_a = 1', 12200c8120aSshafik ]) 123