2 Test using LLDB data formatters with frozen objects coming from the expression parser.
5 from __future__ import print_function
9 from lldbsuite.test.decorators import *
10 from lldbsuite.test.lldbtest import *
11 from lldbsuite.test import lldbutil
14 class ExprFormattersTestCase(TestBase):
16 mydir = TestBase.compute_mydir(__file__)
19 # Call super's setUp().
21 # Find the line number to break for main.cpp.
22 self.line = line_number('main.cpp',
25 @skipIfFreeBSD # llvm.org/pr24691 skipping to avoid crashing the test runner
28 bugnumber='llvm.org/pr19011 Newer Clang omits C1 complete object constructor')
29 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr21765")
30 @skipIfTargetAndroid() # skipping to avoid crashing the test runner
31 @expectedFailureAndroid('llvm.org/pr24691') # we hit an assertion in clang
33 """Test expr + formatters for good interoperability."""
36 # This is the function to remove the custom formats in order to have a
37 # clean slate for the next test case.
39 self.runCmd('type summary clear', check=False)
40 self.runCmd('type synthetic clear', check=False)
42 # Execute the cleanup function during test case tear down.
43 self.addTearDownHook(cleanup)
45 """Test expr + formatters for good interoperability."""
46 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
48 lldbutil.run_break_set_by_file_and_line(
49 self, "main.cpp", self.line, loc_exact=True)
51 self.runCmd("run", RUN_SUCCEEDED)
52 self.runCmd("command script import formatters.py")
53 self.runCmd("command script import foosynth.py")
56 self.runCmd("frame variable foo1 --show-types")
57 self.runCmd("frame variable foo1.b --show-types")
58 self.runCmd("frame variable foo1.b.b_ref --show-types")
61 "expression --show-types -- *(new foo(47))",
69 self.runCmd("type summary add -F formatters.foo_SummaryProvider foo")
71 self.expect("expression new int(12)",
72 substrs=['(int *) $', ' = 0x'])
75 "type summary add -s \"${var%pointer} -> ${*var%decimal}\" \"int *\"")
77 self.expect("expression new int(12)",
78 substrs=['(int *) $', '= 0x', ' -> 12'])
80 self.expect("expression foo1.a_ptr",
81 substrs=['(int *) $', '= 0x', ' -> 13'])
95 "expression --ptr-depth=1 -- new foo(47)",
116 object_name = self.res.GetOutput()
117 object_name = object_name[7:]
118 object_name = object_name[0:object_name.find(' =')]
121 "frame variable foo2",
146 self.runCmd("type summary delete foo")
148 "type synthetic add --python-class foosynth.FooSyntheticProvider foo")
150 self.expect("expression --show-types -- $" + object_name,
151 substrs=['(foo) $', ' = {', '(int) *i_ptr = 243'])
156 self.runCmd("type synthetic delete foo")
157 self.runCmd("type summary add -F formatters.foo_SummaryProvider foo")
170 self.expect("expression $" + object_name + '.a',
173 self.expect("expression *$" + object_name + '.b.i_ptr',
190 self.runCmd("type summary delete foo")
192 "type synthetic add --python-class foosynth.FooSyntheticProvider foo")
194 self.expect("expression --show-types -- $" + object_name,
195 substrs=['(foo) $', ' = {', '(int) *i_ptr = 8888'])
199 self.runCmd("type synthetic delete foo")
200 self.runCmd("type summary add -F formatters.foo_SummaryProvider foo")
215 process = self.dbg.GetSelectedTarget().GetProcess()
216 thread = process.GetThreadAtIndex(0)
217 frame = thread.GetSelectedFrame()
219 frozen = frame.EvaluateExpression("$" + object_name + ".a_ptr")
221 a_data = frozen.GetPointeeData()
223 error = lldb.SBError()
225 a_data.GetUnsignedInt32(
234 self.expect("frame variable numbers",
235 substrs=['1', '2', '3', '4', '5'])
237 self.expect("expression numbers",
238 substrs=['1', '2', '3', '4', '5'])
240 frozen = frame.EvaluateExpression("&numbers")
242 a_data = frozen.GetPointeeData(0, 1)
245 a_data.GetUnsignedInt32(
250 a_data.GetUnsignedInt32(
255 a_data.GetUnsignedInt32(
260 a_data.GetUnsignedInt32(
265 a_data.GetUnsignedInt32(
270 frozen = frame.EvaluateExpression("numbers")
272 a_data = frozen.GetData()
275 a_data.GetUnsignedInt32(
280 a_data.GetUnsignedInt32(
285 a_data.GetUnsignedInt32(
290 a_data.GetUnsignedInt32(
295 a_data.GetUnsignedInt32(