import lldb from lldbsuite.test.lldbtest import * from lldbsuite.test.decorators import * import lldbsuite.test.lldbutil as lldbutil class TestVLA(TestBase): mydir = TestBase.compute_mydir(__file__) @skipIf(compiler="clang", compiler_version=['<', '8.0']) def test_variable_list(self): self.build() _, process, _, _ = lldbutil.run_to_source_breakpoint( self, "break here", lldb.SBFileSpec('main.c')) # Make sure no helper expressions show up in frame variable. var_opts = lldb.SBVariablesOptions() var_opts.SetIncludeArguments(False) var_opts.SetIncludeLocals(True) var_opts.SetInScopeOnly(True) var_opts.SetIncludeStatics(False) var_opts.SetIncludeRuntimeSupportValues(False) var_opts.SetUseDynamic(lldb.eDynamicCanRunTarget) all_locals = self.frame().GetVariables(var_opts) for value in all_locals: self.assertNotIn("vla_expr", value.name) @decorators.skipIf(compiler="clang", compiler_version=['<', '8.0']) def test_vla(self): self.build() _, process, _, _ = lldbutil.run_to_source_breakpoint( self, "break here", lldb.SBFileSpec('main.c')) def test(a): children = [] for i in range(a): name = "[%d]"%i value = str(a-i) self.expect_var_path("vla"+name, type="int", value=value) self.expect_expr("vla"+name, result_type="int", result_value=value) children.append(ValueCheck(name=name, value=value)) self.expect_var_path("vla", type="int[]", children=children) self.expect("expr vla", error=True, substrs=["incomplete"]) test(2) process.Continue() test(4)