diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path')
3 files changed, 113 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/Makefile new file mode 100644 index 00000000000..99998b20bcb --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/TestVarPath.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/TestVarPath.py new file mode 100644 index 00000000000..faab8a7f612 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/TestVarPath.py @@ -0,0 +1,95 @@ +""" +Make sure the getting a variable path works and doesn't crash. +""" + + + +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + + +class TestVarPath(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + # If your test case doesn't stress debug info, the + # set this to true. That way it won't be run once for + # each debug info format. + NO_DEBUG_INFO_TESTCASE = True + + def test_frame_var(self): + self.build() + self.do_test() + + def verify_point(self, frame, var_name, var_typename, x_value, y_value): + v = frame.GetValueForVariablePath(var_name) + self.assertTrue(v.GetError().Success(), "Make sure we find '%s'" % (var_name)) + self.assertTrue(v.GetType().GetName() == var_typename, + "Make sure '%s' has type '%s'" % (var_name, var_typename)) + + if '*' in var_typename: + valid_prefix = var_name + '->' + invalid_prefix = var_name + '.' + else: + valid_prefix = var_name + '.' + invalid_prefix = var_name + '->' + + valid_x_path = valid_prefix + 'x' + valid_y_path = valid_prefix + 'y' + invalid_x_path = invalid_prefix + 'x' + invalid_y_path = invalid_prefix + 'y' + invalid_m_path = invalid_prefix + 'm' + + v = frame.GetValueForVariablePath(valid_x_path) + self.assertTrue(v.GetError().Success(), "Make sure we find '%s'" % (valid_x_path)) + self.assertTrue(v.GetValue() == str(x_value), "Make sure '%s' has a value of %i" % (valid_x_path, x_value)) + self.assertTrue(v.GetType().GetName() == "int", "Make sure '%s' has type 'int'" % (valid_x_path)) + v = frame.GetValueForVariablePath(invalid_x_path) + self.assertTrue(v.GetError().Fail(), "Make sure we don't find '%s'" % (invalid_x_path)) + + v = frame.GetValueForVariablePath(valid_y_path) + self.assertTrue(v.GetError().Success(), "Make sure we find '%s'" % (valid_y_path)) + self.assertTrue(v.GetValue() == str(y_value), "Make sure '%s' has a value of %i" % (valid_y_path, y_value)) + self.assertTrue(v.GetType().GetName() == "int", "Make sure '%s' has type 'int'" % (valid_y_path)) + v = frame.GetValueForVariablePath(invalid_y_path) + self.assertTrue(v.GetError().Fail(), "Make sure we don't find '%s'" % (invalid_y_path)) + + v = frame.GetValueForVariablePath(invalid_m_path) + self.assertTrue(v.GetError().Fail(), "Make sure we don't find '%s'" % (invalid_m_path)) + + def do_test(self): + (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( + self, "// Set a breakpoint here", lldb.SBFileSpec("main.cpp")) + + frame = thread.GetFrameAtIndex(0) + v = frame.GetValueForVariablePath('no_such_variable') + self.assertTrue(v.GetError().Fail(), "Make sure we don't find 'no_such_variable'") + + # Test an instance + self.verify_point(frame, 'pt', 'Point', 1, 2) + # Test a pointer + self.verify_point(frame, 'pt_ptr', 'Point *', 3030, 4040) + # Test using a pointer as an array + self.verify_point(frame, 'pt_ptr[-1]', 'Point', 1010, 2020) + self.verify_point(frame, 'pt_ptr[0]', 'Point', 3030, 4040) + self.verify_point(frame, 'pt_ptr[1]', 'Point', 5050, 6060) + # Test arrays + v = frame.GetValueForVariablePath('points') + self.assertTrue(v.GetError().Success(), + "Make sure we find 'points'") + self.verify_point(frame, 'points[0]', 'Point', 1010, 2020) + self.verify_point(frame, 'points[1]', 'Point', 3030, 4040) + self.verify_point(frame, 'points[2]', 'Point', 5050, 6060) + # Test a reference + self.verify_point(frame, 'pt_ref', 'Point &', 1, 2) + v = frame.GetValueForVariablePath('pt_sp') + self.assertTrue(v.GetError().Success(), "Make sure we find 'pt_sp'") + # Make sure we don't crash when looking for non existant child + # in type with synthetic children. This used to cause a crash. + v = frame.GetValueForVariablePath('pt_sp->not_valid_child') + self.assertTrue(v.GetError().Fail(), + "Make sure we don't find 'pt_sp->not_valid_child'") + + + diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/main.cpp new file mode 100644 index 00000000000..0ea19cfcfea --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/functionalities/var_path/main.cpp @@ -0,0 +1,15 @@ +#include <memory> + +struct Point { + int x, y; +}; + +int main() { + Point pt = { 1, 2 }; + Point points[] = {{1010,2020}, {3030,4040}, {5050,6060}}; + Point *pt_ptr = &points[1]; + Point &pt_ref = pt; + std::shared_ptr<Point> pt_sp(new Point{111,222}); + return 0; // Set a breakpoint here +} + |