Skip to content

Commit e3a8867

Browse files
committed
Address reviewer comments:
- Moved DIL SharedPtr and UniquePtr tests to API/functionalities/data-formatter/data-formatter-stl/libcxx/dil_shared_ptr and API/functionalities/data-formatter/data-formatter-stl/libcxx/dil_unique_ptr - Moved my new test to API/command/frame/var-dil/basics/SyntheticDereference. - Changed 'smart_ptr' to 'wrap_ptr' in new test. - Changed internal field name from '__ptr_' to 'ptr. - Remove dead code from test. - Update pointer dereference test to test some expected vs actual addresses, as suggested.
1 parent e823fd7 commit e3a8867

File tree

13 files changed

+51
-41
lines changed

13 files changed

+51
-41
lines changed

lldb/test/API/commands/frame/var-dil/basics/PointerDereference/TestFrameVarDILPointerDereference.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,14 @@ def test_frame_var(self):
3232
error=True,
3333
substrs=["subscript of pointer to incomplete type 'void'"],
3434
)
35+
36+
# Verify some of the returned values.
37+
pp_void0_2_got = self.expect_var_path("&pp_void0[2]", type="void **")
38+
# Initialized in C++ code to point to the same value
39+
pp_void0_2_exp = self.expect_var_path("pp_void0_2", type="void **")
40+
self.assertEqual(pp_void0_2_got.GetValueAsAddress(),
41+
pp_void0_2_exp.GetValueAsAddress())
42+
pp_int0_2stars_got = self.expect_var_path("&**pp_int0", type="int *")
43+
pp_int0_2stars_exp = self.expect_var_path("pp_int0_2stars", type="int *")
44+
self.assertEqual(pp_int0_2stars_got.GetValueAsAddress(),
45+
pp_int0_2stars_exp.GetValueAsAddress())

lldb/test/API/commands/frame/var-dil/basics/PointerDereference/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ int main(int argc, char **argv) {
2626
void **pp_void0 = &p_void;
2727
void **pp_void1 = pp_void0 + 1;
2828

29+
void **pp_void0_2 = &pp_void0[2];
30+
int *pp_int0_2stars = &**pp_int0;
2931
std::nullptr_t std_nullptr_t = nullptr;
3032

3133
return 0; // Set a breakpoint here
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
2-
Test code that should work on smart pointers, but make it impl independent.
2+
Test code for dereferencing synthetic wrapped pointers.
33
"""
44

55
import lldb
@@ -8,7 +8,7 @@
88
from lldbsuite.test import lldbutil
99

1010

11-
class FakeSmartPtrDataFormatterTestCase(TestBase):
11+
class DILSyntheticDereferenceTestCase(TestBase):
1212
# If your test case doesn't stress debug info, then
1313
# set this to true. That way it won't be run once for
1414
# each debug info format.
@@ -21,14 +21,14 @@ def test_frame_var(self):
2121
)
2222

2323
self.runCmd("settings set target.experimental.use-DIL true")
24-
self.runCmd("script from smartPtrSynthProvider import *")
25-
self.runCmd("type synth add -l smartPtrSynthProvider smart_ptr")
24+
self.runCmd("script from wrapPtrSynthProvider import *")
25+
self.runCmd("type synth add -l wrapPtrSynthProvider wrap_ptr")
2626

2727
self.expect_var_path("ptr_node->value", value="1")
2828
self.expect_var_path("ptr_node->next->value", value="2")
2929
self.expect_var_path("(*ptr_node).value", value="1")
3030
self.expect_var_path("(*(*ptr_node).next).value", value="2")
3131

32-
self.expect_var_path("ptr_node.__ptr_", type="NodeS *")
33-
self.expect_var_path("ptr_node.__ptr_->value", value="1")
34-
self.expect_var_path("ptr_node.__ptr_->next.__ptr_->value", value="2")
32+
self.expect_var_path("ptr_node.ptr", type="NodeS *")
33+
self.expect_var_path("ptr_node.ptr->value", value="1")
34+
self.expect_var_path("ptr_node.ptr->next.ptr->value", value="2")
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <memory>
2+
3+
struct NodeS;
4+
5+
// Class to wrap pointers.
6+
class wrap_ptr {
7+
public:
8+
NodeS *ptr;
9+
10+
wrap_ptr(NodeS *n_ptr) : ptr(n_ptr) {}
11+
};
12+
13+
struct NodeS {
14+
wrap_ptr next;
15+
int value;
16+
17+
NodeS(NodeS *n_ptr, int val) : next(wrap_ptr(n_ptr)), value(val) {}
18+
};
19+
20+
int main(int argc, char **argv) {
21+
22+
// Make a short linked list of fake smart pointers.
23+
auto ptr_node = wrap_ptr(new NodeS(new NodeS(nullptr, 2), 1));
24+
25+
return 0; // Set a breakpoint here
26+
}

lldb/test/API/functionalities/data-formatter/fake-smart-ptr/smartPtrSynthProvider.py renamed to lldb/test/API/commands/frame/var-dil/basics/SyntheticDereference/wrapPtrSynthProvider.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import lldb
22

33

4-
class smartPtrSynthProvider:
4+
class wrapPtrSynthProvider:
55
def __init__(self, valobj, dict):
66
self.valobj = valobj
77

@@ -10,19 +10,16 @@ def num_children(self):
1010

1111
def get_child_at_index(self, index):
1212
if index == 0:
13-
return self.valobj.GetChildMemberWithName("__ptr_")
13+
return self.valobj.GetChildMemberWithName("ptr")
1414
if index == 1:
15-
internal_child = self.valobj.GetChildMemberWithName("__ptr_")
15+
internal_child = self.valobj.GetChildMemberWithName("ptr")
1616
if not internal_child:
1717
return None
18-
value_type = internal_child.GetType().GetPointerType()
19-
cast_ptr_sp = internal_child.Cast(value_type)
20-
value = internal_child.Dereference()
21-
return value
18+
return internal_child.Dereference()
2219
return None
2320

2421
def get_child_index(self, name):
25-
if name == "__ptr_":
22+
if name == "ptr":
2623
return 0
2724
if name == "$$dereference$$":
2825
return 1

0 commit comments

Comments
 (0)