[Lldb-commits] [lldb] a0b71b0 - Revert "[LLDB] Fix MS STL `variant` with non-trivial types" (#176059)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Jan 14 15:29:36 PST 2026
Author: Jonas Devlieghere
Date: 2026-01-14T23:29:33Z
New Revision: a0b71b048b68a3d23a4a62b27058df4eba69e4ee
URL: https://github.com/llvm/llvm-project/commit/a0b71b048b68a3d23a4a62b27058df4eba69e4ee
DIFF: https://github.com/llvm/llvm-project/commit/a0b71b048b68a3d23a4a62b27058df4eba69e4ee.diff
LOG: Revert "[LLDB] Fix MS STL `variant` with non-trivial types" (#176059)
Reverts llvm/llvm-project#171489 because it causes
`TestDataFormatterStdVariant.py` to fail on Darwin.
Affected bots:
- https://ci.swift.org/view/all/job/llvm.org/view/LLDB/job/as-lldb-cmake/
- https://ci.swift.org/view/all/job/llvm.org/view/LLDB/job/lldb-cmake/
Added:
Modified:
lldb/source/Plugins/Language/CPlusPlus/MsvcStlVariant.cpp
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/TestDataFormatterStdVariant.py
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/main.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVariant.cpp b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVariant.cpp
index 55e964256264f..3e7647be48bb0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVariant.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVariant.cpp
@@ -67,18 +67,12 @@ std::optional<int64_t> GetIndexValue(ValueObject &valobj) {
ValueObjectSP GetNthStorage(ValueObject &outer, int64_t index) {
// We need to find the std::_Variant_storage base class.
- // Navigate "down" to std::_Variant_base by finding the holder of "_Which".
- // This might be down a few levels if a variant member isn't trivially
- // destructible/copyable/etc.
- ValueObjectSP which_sp = outer.GetChildMemberWithName("_Which");
- if (!which_sp)
- return nullptr;
- ValueObject *parent = which_sp->GetParent();
- if (!parent)
+ // -> std::_SMF_control (typedef to std::_Variant_base)
+ ValueObjectSP container_sp = outer.GetSP()->GetChildAtIndex(0);
+ if (!container_sp)
return nullptr;
-
- // Now go to std::_Variant_storage.
- ValueObjectSP container_sp = parent->GetChildAtIndex(0);
+ // -> std::_Variant_storage
+ container_sp = container_sp->GetChildAtIndex(0);
if (!container_sp)
return nullptr;
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/TestDataFormatterStdVariant.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/TestDataFormatterStdVariant.py
index d5c4f5c34cfe0..1ae07a91dfe3d 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/TestDataFormatterStdVariant.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/TestDataFormatterStdVariant.py
@@ -50,14 +50,6 @@ def cleanup():
],
)
- self.expect_expr(
- "v4",
- result_summary=" Active Type = int ",
- result_children=[
- ValueCheck(name="Value", value="4"),
- ],
- )
-
lldbutil.continue_to_breakpoint(self.process, bkpt)
self.expect(
@@ -77,19 +69,6 @@ def cleanup():
substrs=["v3 = Active Type = char {", "Value = 'A'", "}"],
)
- string_name = (
- "std::basic_string<char, std::char_traits<char>, std::allocator<char>>"
- if self.getDebugInfo() == "pdb"
- else "std::basic_string<char>"
- )
- self.expect_expr(
- "v4",
- result_summary=f" Active Type = {string_name} ",
- result_children=[
- ValueCheck(name="Value", summary='"a string"'),
- ],
- )
-
self.expect("frame variable v_valueless", substrs=["v_valueless = No Value"])
self.expect(
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/main.cpp
index 9983104ca9628..620b97b7306f9 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/main.cpp
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/variant/main.cpp
@@ -49,8 +49,6 @@ int main() {
S>
v_300_types_valueless;
- std::variant<int, bool, std::string> v4 = 4;
-
v_valueless = 5;
v_300_types_valueless.emplace<0>(10);
@@ -72,9 +70,6 @@ int main() {
// state when we change its value.
v1 = 2.0;
d = std::get<double>(v1);
-
- v4 = "a string";
-
printf("%f\n", d); // break here
try {
More information about the lldb-commits
mailing list