Skip to content

Commit 81dac36

Browse files
committed
refactor: use API tests
1 parent e14771a commit 81dac36

24 files changed

+260
-468
lines changed

lldb/source/Plugins/Language/CPlusPlus/MsvcStlAtomic.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "MsvcStl.h"
1010

11+
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
1112
#include "lldb/DataFormatters/TypeSynthetic.h"
1213

1314
using namespace lldb;
@@ -64,10 +65,31 @@ lldb_private::formatters::MsvcStlAtomicSyntheticFrontEnd::Update() {
6465
if (!storage_sp)
6566
return lldb::ChildCacheState::eRefetch;
6667

67-
m_element_type = m_backend.GetCompilerType().GetTypeTemplateArgument(0);
68-
if (!m_element_type)
68+
CompilerType backend_type = m_backend.GetCompilerType();
69+
if (!backend_type)
6970
return lldb::ChildCacheState::eRefetch;
7071

72+
m_element_type = backend_type.GetTypeTemplateArgument(0);
73+
// PDB doesn't have info about templates, so this uses the return type of
74+
// `load`. Which is equivalent to the template type.
75+
if (!m_element_type) {
76+
auto ast_ctx = backend_type.GetTypeSystem<TypeSystemClang>();
77+
if (!ast_ctx)
78+
return lldb::ChildCacheState::eRefetch;
79+
80+
clang::CXXRecordDecl *record_decl =
81+
TypeSystemClang::GetAsCXXRecordDecl(backend_type.GetOpaqueQualType());
82+
for (const auto *method : record_decl->methods()) {
83+
if (method->getDeclName().isIdentifier() && method->getName() == "load") {
84+
m_element_type = ast_ctx->GetType(method->getReturnType());
85+
break;
86+
}
87+
}
88+
89+
if (!m_element_type)
90+
return lldb::ChildCacheState::eRefetch;
91+
}
92+
7193
m_storage = storage_sp.get();
7294
return lldb::ChildCacheState::eRefetch;
7395
}

lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,13 @@ Error UdtRecordCompleter::visitKnownMember(
168168
// Static constant members may be a const[expr] declaration.
169169
// Query the symbol's value as the variable initializer if valid.
170170
if (member_ct.IsConst() && member_ct.IsCompleteType()) {
171-
std::string qual_name = decl->getQualifiedNameAsString();
171+
std::string qual_name;
172+
if (m_record.record.kind == Member::Struct)
173+
qual_name = (m_cvr.cr.Name + "::" + static_data_member.Name).str();
174+
else if (m_record.record.kind == Member::Union)
175+
qual_name = (m_cvr.ur.Name + "::" + static_data_member.Name).str();
176+
else
177+
qual_name = decl->getQualifiedNameAsString();
172178

173179
auto results =
174180
m_index.globals().findRecordsByName(qual_name, m_index.symrecords());

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/atomic/TestDataFormatterStdAtomic.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111

1212
class StdAtomicTestCase(TestBase):
13+
TEST_WITH_PDB_DEBUG_INFO = True
14+
1315
def get_variable(self, name):
1416
var = self.frame().FindVariable(name)
1517
var.SetPreferDynamicValue(lldb.eDynamicCanRunTarget)

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66

77
class GenericDequeDataFormatterTestCase(TestBase):
8+
TEST_WITH_PDB_DEBUG_INFO = True
9+
810
def findVariable(self, name):
911
var = self.frame().FindVariable(name)
1012
self.assertTrue(var.IsValid())

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/forward_list/TestDataFormatterGenericForwardList.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010

1111
class TestDataFormatterGenericForwardList(TestBase):
12+
TEST_WITH_PDB_DEBUG_INFO = True
13+
1214
def setUp(self):
1315
TestBase.setUp(self)
1416
self.line = line_number("main.cpp", "// break here")

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/list/TestDataFormatterGenericList.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111

1212
class GenericListDataFormatterTestCase(TestBase):
13+
TEST_WITH_PDB_DEBUG_INFO = True
14+
1315
def setUp(self):
1416
# Call super's setUp().
1517
TestBase.setUp(self)

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/map/TestDataFormatterStdMap.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010

1111
class StdMapDataFormatterTestCase(TestBase):
12+
TEST_WITH_PDB_DEBUG_INFO = True
13+
1214
def setUp(self):
1315
TestBase.setUp(self)
1416
ns = "ndk" if lldbplatformutil.target_is_android() else ""

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212

1313
class GenericMultiMapDataFormatterTestCase(TestBase):
14+
TEST_WITH_PDB_DEBUG_INFO = True
15+
1416
def setUp(self):
1517
TestBase.setUp(self)
1618
self.namespace = "std"

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multiset/TestDataFormatterGenericMultiSet.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111

1212
class GenericMultiSetDataFormatterTestCase(TestBase):
13+
TEST_WITH_PDB_DEBUG_INFO = True
14+
1315
def setUp(self):
1416
TestBase.setUp(self)
1517
self.namespace = "std"

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66

77
class GenericOptionalDataFormatterTestCase(TestBase):
8+
TEST_WITH_PDB_DEBUG_INFO = True
9+
810
def do_test_with_run_command(self):
911
"""Test that that file and class static variables display correctly."""
1012

@@ -55,7 +57,11 @@ def cleanup():
5557
self.expect(
5658
"frame var numbers",
5759
substrs=[
58-
"(optional_int_vect) numbers = Has Value=true {",
60+
(
61+
"(std::optional<std::vector<int, std::allocator<int>>>) numbers = Has Value=true {"
62+
if self.getDebugInfo() == "pdb"
63+
else "(optional_int_vect) numbers = Has Value=true {"
64+
),
5965
"Value = size=4 {",
6066
"[0] = 1",
6167
"[1] = 2",
@@ -69,7 +75,11 @@ def cleanup():
6975
self.expect(
7076
"frame var ostring",
7177
substrs=[
72-
"(optional_string) ostring = Has Value=true {",
78+
(
79+
"(std::optional<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>) ostring = Has Value=true {"
80+
if self.getDebugInfo() == "pdb"
81+
else "(optional_string) ostring = Has Value=true {"
82+
),
7383
'Value = "hello"',
7484
"}",
7585
],

0 commit comments

Comments
 (0)