[Lldb-commits] [lldb] 95bcf5d - [lldb] Compare registers by LLDB register number (#223704)

via lldb-commits lldb-commits at lists.llvm.org
Tue Sep 15 09:54:54 PDT 2026


Author: Charles Zablit
Date: 2026-09-15T17:54:48+01:00
New Revision: 95bcf5d16a63e534e8ce0f039d8572734f87b5cd

URL: https://github.com/llvm/llvm-project/commit/95bcf5d16a63e534e8ce0f039d8572734f87b5cd
DIFF: https://github.com/llvm/llvm-project/commit/95bcf5d16a63e534e8ce0f039d8572734f87b5cd.diff

LOG: [lldb] Compare registers by LLDB register number (#223704)

Fix `GetIndexOfChildWithName`/`GetChildMemberWithName` on `Windows
x86_64` (Release builds), where comparing registers by RegisterInfo
pointer identity could spuriously fail to find sp/rsp in the GPR set.

Compare by `eRegisterKindLLDB` number instead.

Failing bot: https://ci-external.swift.org/job/lldb-windows/job/main

Added: 
    

Modified: 
    lldb/include/lldb/ValueObject/ValueObjectRegister.h
    lldb/source/ValueObject/ValueObjectRegister.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/ValueObject/ValueObjectRegister.h b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
index 57ee2eadce4fb..b52fa23838c51 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectRegister.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
@@ -78,6 +78,8 @@ class ValueObjectRegisterSet : public ValueObject {
   std::optional<std::pair<size_t, const RegisterInfo *>>
   LookupChildWithName(llvm::StringRef name);
 
+  static bool IsSameRegister(const RegisterInfo *a, const RegisterInfo *b);
+
   // For ValueObject only
   ValueObjectRegisterSet(const ValueObjectRegisterSet &) = delete;
   const ValueObjectRegisterSet &

diff  --git a/lldb/source/ValueObject/ValueObjectRegister.cpp b/lldb/source/ValueObject/ValueObjectRegister.cpp
index 432824e7e34fb..1a7a4560714bc 100644
--- a/lldb/source/ValueObject/ValueObjectRegister.cpp
+++ b/lldb/source/ValueObject/ValueObjectRegister.cpp
@@ -126,6 +126,11 @@ ValueObject *ValueObjectRegisterSet::CreateChildAtIndex(size_t idx) {
   return nullptr;
 }
 
+bool ValueObjectRegisterSet::IsSameRegister(const RegisterInfo *a,
+                                            const RegisterInfo *b) {
+  return a && b && a->kinds[eRegisterKindLLDB] == b->kinds[eRegisterKindLLDB];
+}
+
 std::optional<std::pair<size_t, const RegisterInfo *>>
 ValueObjectRegisterSet::LookupChildWithName(llvm::StringRef name) {
   if (!m_reg_ctx_sp || !m_reg_set)
@@ -140,7 +145,7 @@ ValueObjectRegisterSet::LookupChildWithName(llvm::StringRef name) {
   for (size_t i = 0; i < m_reg_set->num_registers; ++i) {
     const RegisterInfo *contained_reg_info =
         m_reg_ctx_sp->GetRegisterInfoAtIndex(m_reg_set->registers[i]);
-    if (contained_reg_info == reg_info)
+    if (IsSameRegister(contained_reg_info, reg_info))
       return std::make_pair(i, reg_info);
   }
 


        


More information about the lldb-commits mailing list