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 4999451b44SJordan Rupprecht self.expect( 5099451b44SJordan Rupprecht "frame variable --show-types lba", 5199451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 5299451b44SJordan Rupprecht substrs=[ 5399451b44SJordan Rupprecht '(int:32) = ', 5499451b44SJordan Rupprecht '(unsigned int:20) a = 2', 5599451b44SJordan Rupprecht ]) 5699451b44SJordan Rupprecht 5799451b44SJordan Rupprecht self.expect( 5899451b44SJordan Rupprecht "frame variable --show-types lbb", 5999451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 6099451b44SJordan Rupprecht substrs=[ 6199451b44SJordan Rupprecht '(unsigned int:1) a = 1', 6299451b44SJordan Rupprecht '(int:31) =', 6399451b44SJordan Rupprecht '(unsigned int:20) b = 3', 6499451b44SJordan Rupprecht ]) 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht self.expect( 6799451b44SJordan Rupprecht "frame variable --show-types lbc", 6899451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 6999451b44SJordan Rupprecht substrs=[ 7099451b44SJordan Rupprecht '(int:22) =', 7199451b44SJordan Rupprecht '(unsigned int:1) a = 1', 7299451b44SJordan Rupprecht '(unsigned int:1) b = 0', 7399451b44SJordan Rupprecht '(unsigned int:5) c = 4', 7499451b44SJordan Rupprecht '(unsigned int:1) d = 1', 7599451b44SJordan Rupprecht '(int:2) =', 7699451b44SJordan Rupprecht '(unsigned int:20) e = 20', 7799451b44SJordan Rupprecht ]) 7899451b44SJordan Rupprecht 7999451b44SJordan Rupprecht self.expect( 8099451b44SJordan Rupprecht "frame variable --show-types lbd", 8199451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 8299451b44SJordan Rupprecht substrs=[ 8399451b44SJordan Rupprecht '(char [3]) arr = "ab"', 8499451b44SJordan Rupprecht '(int:32) =', 8599451b44SJordan Rupprecht '(unsigned int:20) a = 5', 8699451b44SJordan Rupprecht ]) 8799451b44SJordan Rupprecht 8899451b44SJordan Rupprecht self.expect( 8999451b44SJordan Rupprecht "frame variable --show-types clang_example", 9099451b44SJordan Rupprecht VARIABLES_DISPLAYED_CORRECTLY, 9199451b44SJordan Rupprecht substrs=[ 9299451b44SJordan Rupprecht '(int:22) =', 9399451b44SJordan Rupprecht '(uint64_t:1) a = 1', 9499451b44SJordan Rupprecht '(uint64_t:1) b = 0', 9599451b44SJordan Rupprecht '(uint64_t:1) c = 1', 9699451b44SJordan Rupprecht '(uint64_t:1) d = 0', 9799451b44SJordan Rupprecht '(uint64_t:1) e = 1', 9899451b44SJordan Rupprecht '(uint64_t:1) f = 0', 9999451b44SJordan Rupprecht '(uint64_t:1) g = 1', 10099451b44SJordan Rupprecht '(uint64_t:1) h = 0', 10199451b44SJordan Rupprecht '(uint64_t:1) i = 1', 10299451b44SJordan Rupprecht '(uint64_t:1) j = 0', 10399451b44SJordan Rupprecht '(uint64_t:1) k = 1', 10499451b44SJordan Rupprecht ]) 10599451b44SJordan Rupprecht 106*00c8120aSshafik self.expect( 107*00c8120aSshafik "frame variable --show-types derived", 108*00c8120aSshafik VARIABLES_DISPLAYED_CORRECTLY, 109*00c8120aSshafik substrs=[ 110*00c8120aSshafik '(uint32_t) b_a = 2', 111*00c8120aSshafik '(uint32_t:1) d_a = 1', 112*00c8120aSshafik ]) 113