mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

The test was printing a char[3] variable without a terminating nul. The memory after that variable (an unnamed bitfield) was not initialized. If the memory happened to be nonzero, the summary provider for the variable would run off into the next field. This is probably not the right behavior (it should stop at the end of the array), but this is not the purpose of this test. I have filed pr44649 for this bug, and fixed the test to not depend on this behavior.
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
"""Show bitfields and check that they display correctly."""
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class CppBitfieldsTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def setUp(self):
|
|
# Call super's setUp().
|
|
TestBase.setUp(self)
|
|
# Find the line number to break inside main().
|
|
self.line = line_number('main.cpp', '// Set break point at this line.')
|
|
|
|
# BitFields exhibit crashes in record layout on Windows
|
|
# (http://llvm.org/pr21800)
|
|
@skipIfWindows
|
|
def test_and_run_command(self):
|
|
"""Test 'frame variable ...' on a variable with bitfields."""
|
|
self.build()
|
|
|
|
lldbutil.run_to_source_breakpoint(self, '// Set break point at this line.',
|
|
lldb.SBFileSpec("main.cpp", False))
|
|
|
|
# The stop reason of the thread should be breakpoint.
|
|
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs=['stopped',
|
|
'stop reason = breakpoint'])
|
|
|
|
# The breakpoint should have a hit count of 1.
|
|
self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
|
|
substrs=[' resolved, hit count = 1'])
|
|
|
|
self.expect("expr (lba.a)", VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=['unsigned int', '2'])
|
|
self.expect("expr (lbb.b)", VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=['unsigned int', '3'])
|
|
self.expect("expr (lbc.c)", VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=['unsigned int', '4'])
|
|
self.expect("expr (lbd.a)", VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=['unsigned int', '5'])
|
|
self.expect("expr (clang_example.f.a)", VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=['uint64_t', '1'])
|
|
|
|
self.expect(
|
|
"frame variable --show-types lba",
|
|
VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=[
|
|
'(int:32) = ',
|
|
'(unsigned int:20) a = 2',
|
|
])
|
|
|
|
self.expect(
|
|
"frame variable --show-types lbb",
|
|
VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=[
|
|
'(unsigned int:1) a = 1',
|
|
'(int:31) =',
|
|
'(unsigned int:20) b = 3',
|
|
])
|
|
|
|
self.expect(
|
|
"frame variable --show-types lbc",
|
|
VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=[
|
|
'(int:22) =',
|
|
'(unsigned int:1) a = 1',
|
|
'(unsigned int:1) b = 0',
|
|
'(unsigned int:5) c = 4',
|
|
'(unsigned int:1) d = 1',
|
|
'(int:2) =',
|
|
'(unsigned int:20) e = 20',
|
|
])
|
|
|
|
self.expect(
|
|
"frame variable --show-types lbd",
|
|
VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=[
|
|
'(char [3]) arr = "ab"',
|
|
'(int:32) =',
|
|
'(unsigned int:20) a = 5',
|
|
])
|
|
|
|
self.expect(
|
|
"frame variable --show-types clang_example",
|
|
VARIABLES_DISPLAYED_CORRECTLY,
|
|
substrs=[
|
|
'(int:22) =',
|
|
'(uint64_t:1) a = 1',
|
|
'(uint64_t:1) b = 0',
|
|
'(uint64_t:1) c = 1',
|
|
'(uint64_t:1) d = 0',
|
|
'(uint64_t:1) e = 1',
|
|
'(uint64_t:1) f = 0',
|
|
'(uint64_t:1) g = 1',
|
|
'(uint64_t:1) h = 0',
|
|
'(uint64_t:1) i = 1',
|
|
'(uint64_t:1) j = 0',
|
|
'(uint64_t:1) k = 1',
|
|
])
|
|
|