llvm-project/lldb/test/API/commands/frame/var-dil/basics/BitFieldExtraction/TestFrameVarDILBitFieldExtraction.py

69 lines
2.3 KiB
Python

"""
Test DIL BifField extraction.
"""
import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test import lldbutil
class TestFrameVarDILBitFieldExtraction(TestBase):
NO_DEBUG_INFO_TESTCASE = True
def test_bitfield_extraction(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "Set a breakpoint here", lldb.SBFileSpec("main.cpp")
)
self.runCmd("settings set target.experimental.use-DIL true")
# Test ranges and type
self.expect_var_path("value[0:1]", value="3", type="int:2")
self.expect_var_path("value[4:7]", value="7", type="int:4")
self.expect_var_path("value[7:0]", value="115", type="int:8")
# Test reference and dereferenced pointer
self.expect_var_path("value_ref[0:1]", value="3", type="int:2")
self.expect_var_path("(*value_ptr)[0:1]", value="3", type="int:2")
# Test ranges as variable, reference, enum
self.expect_var_path("value[idx_0:idx_1]", value="3", type="int:2")
self.expect_var_path("value[0:idx_1_ref]", value="3", type="int:2")
self.expect_var_path("value[idx_1_ref:0]", value="3", type="int:2")
self.expect_var_path("value[0:enum_one]", value="3", type="int:2")
self.expect_var_path("value[enum_one:0]", value="3", type="int:2")
# Test that old range syntax is now a binary subtraction
self.expect_var_path("value[6-1]", value="1", type="int:1")
# Test array and pointer
self.expect(
"frame var 'int_arr[0:2]'",
error=True,
substrs=["bitfield range 0:2 is not valid"],
)
self.expect(
"frame var 'value_ptr[0:1]'",
error=True,
substrs=["bitfield range 0:1 is not valid"],
)
# Test invalid input
self.expect(
"frame var 'value[1:]'",
error=True,
substrs=["Unexpected token: <']' (r_square)>"],
)
self.expect(
"frame var 'value[1:2.0]'",
error=True,
substrs=["bit index is not an integer"],
)
self.expect(
"frame var 'value[2.0:1]'",
error=True,
substrs=["bit index is not an integer"],
)