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