This fix is based on a problem with cxx_compiler and cxx_linker macros on Windows. There was an issue with compiler detection in paths containing "icc". In such case, Makefile.rules thought it was provided with icc compiler. To solve that, utilities detection has been rewritten in Python. The last element of compiler's path is separated, taking into account the platform path delimiter, and compiler type is extracted, with regard of possible cross-toolchain prefix. --------- Co-authored-by: Pavel Labath <pavel@labath.sk>
122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
"""
|
|
Test lldb data formatter subsystem.
|
|
"""
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class PrintObjectArrayTestCase(TestBase):
|
|
@skipUnlessDarwin
|
|
def test_print_array(self):
|
|
"""Test that expr -O -Z works"""
|
|
self.build()
|
|
self.printarray_data_formatter_commands()
|
|
|
|
@skipUnlessDarwin
|
|
def test_print_array_no_const(self):
|
|
"""Test that expr -O -Z works"""
|
|
disable_constant_classes = {
|
|
"USE_SYSTEM_STDLIB": "1", # See above.
|
|
"CFLAGS_EXTRAS": "-fno-constant-nsnumber-literals "
|
|
+ "-fno-constant-nsarray-literals "
|
|
+ "-fno-constant-nsdictionary-literals",
|
|
}
|
|
# FIXME: Remove compiler when flags are available upstream.
|
|
self.build(dictionary=disable_constant_classes, compiler="xcrun clang")
|
|
self.printarray_data_formatter_commands()
|
|
|
|
def setUp(self):
|
|
# Call super's setUp().
|
|
TestBase.setUp(self)
|
|
# Find the line number to break at.
|
|
self.line = line_number("main.mm", "break here")
|
|
|
|
def printarray_data_formatter_commands(self):
|
|
"""Test that expr -O -Z works"""
|
|
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
|
|
|
|
lldbutil.run_break_set_by_file_and_line(
|
|
self, "main.mm", self.line, num_expected_locations=1, loc_exact=True
|
|
)
|
|
|
|
self.runCmd("run", RUN_SUCCEEDED)
|
|
|
|
# The stop reason of the thread should be breakpoint.
|
|
self.expect(
|
|
"thread list",
|
|
STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs=["stopped", "stop reason = breakpoint"],
|
|
)
|
|
|
|
# This is the function to remove the custom formats in order to have a
|
|
# clean slate for the next test case.
|
|
def cleanup():
|
|
self.runCmd("type format clear", check=False)
|
|
self.runCmd("type summary clear", check=False)
|
|
self.runCmd("type synth clear", check=False)
|
|
|
|
# Execute the cleanup function during test case tear down.
|
|
self.addTearDownHook(cleanup)
|
|
|
|
self.expect(
|
|
"expr --element-count 3 --object-description -- objects",
|
|
substrs=[
|
|
"3735928559",
|
|
"4276993775",
|
|
"3203398366",
|
|
"Hello",
|
|
"World",
|
|
"Two =",
|
|
"1 =",
|
|
],
|
|
)
|
|
self.expect(
|
|
"poarray 3 objects",
|
|
substrs=[
|
|
"3735928559",
|
|
"4276993775",
|
|
"3203398366",
|
|
"Hello",
|
|
"World",
|
|
"Two =",
|
|
"1 =",
|
|
],
|
|
)
|
|
self.expect(
|
|
"expr --element-count 3 --object-description --description-verbosity=full -- objects",
|
|
substrs=[
|
|
"[0] =",
|
|
"3735928559",
|
|
"4276993775",
|
|
"3203398366",
|
|
"[1] =",
|
|
"Hello",
|
|
"World",
|
|
"[2] =",
|
|
"Two =",
|
|
"1 =",
|
|
],
|
|
)
|
|
self.expect("parray 3 objects", substrs=["[0] = 0x", "[1] = 0x", "[2] = 0x"])
|
|
self.expect(
|
|
"expr --element-count 3 -d run -- objects",
|
|
substrs=["3 elements", "2 elements", "2 key/value pairs"],
|
|
)
|
|
self.expect(
|
|
"expr --element-count 3 -d run --ptr-depth=1 -- objects",
|
|
substrs=[
|
|
"3 elements",
|
|
"3735928559",
|
|
"4276993775",
|
|
"3203398366",
|
|
"2 elements",
|
|
'"Hello"',
|
|
'"World"',
|
|
"2 key/value pairs",
|
|
],
|
|
)
|