[Lldb-commits] [lldb] [llvm] [lldb] Improve language bindings for SBModule/SBModuleSpec UUID APIs (PR #186242)

Ebuka Ezike via lldb-commits lldb-commits at lists.llvm.org
Fri Mar 13 05:14:30 PDT 2026


https://github.com/da-viper updated https://github.com/llvm/llvm-project/pull/186242

>From f56e2dbaec47cec16c62c4b1278f3a3218c189e6 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Thu, 12 Mar 2026 20:20:45 +0000
Subject: [PATCH 1/2] [lldb] Improve language bindings for
 SBModule/SBModuleSpec UUID APIs

Replace raw pointer returns from `GetUUIDBytes()` with idiomatic types
in Python (`bytes`) and Lua (`string`)

I had to over load the `SetUUIDBytes` since users may be using
the existing pointer api.
---
 lldb/bindings/headers.swig                    |   9 ++
 lldb/bindings/interface/SBModuleExtensions.i  |   6 +
 .../interface/SBModuleSpecExtensions.i        |  12 ++
 lldb/bindings/interfaces.swig                 | 118 +++++++++---------
 lldb/bindings/lua/lua-typemaps.swig           |  28 +++++
 lldb/bindings/python/python-typemaps.swig     |  29 +++++
 lldb/include/lldb/API/SBModule.h              |   2 +
 lldb/source/API/SBModule.cpp                  |  10 ++
 lldb/test/API/lua_api/TestModuleAPI.lua       |  24 ++++
 .../TestDefaultConstructorForAPIObjects.py    |  10 ++
 .../default-constructor/sb_module.py          |   2 +
 .../default-constructor/sb_modulespec.py      |  29 +++++
 .../sbmodulespec/TestSBModuleSpec.py          |  16 +++
 .../sbplatform/TestLocateModuleCallback.py    |   9 +-
 llvm/docs/ReleaseNotes.md                     |   3 +
 15 files changed, 242 insertions(+), 65 deletions(-)
 create mode 100644 lldb/test/API/lua_api/TestModuleAPI.lua
 create mode 100644 lldb/test/API/python_api/default-constructor/sb_modulespec.py
 create mode 100644 lldb/test/API/python_api/sbmodulespec/TestSBModuleSpec.py

diff --git a/lldb/bindings/headers.swig b/lldb/bindings/headers.swig
index ee9720bd0b5ce..55b9c8021c928 100644
--- a/lldb/bindings/headers.swig
+++ b/lldb/bindings/headers.swig
@@ -9,3 +9,12 @@
 #include "lldb/lldb-public.h"
 #include "lldb/API/LLDB.h"
 %}
+
+%{
+// helper struct to creating language bindings for SetUUID/GetUUID bytes.
+// It only exists in swig generated `LLDBWrapLANG.cpp` file
+struct UUIDSpan {
+    const uint8_t* data;
+    size_t length;
+};
+%}
diff --git a/lldb/bindings/interface/SBModuleExtensions.i b/lldb/bindings/interface/SBModuleExtensions.i
index ded1adae3e6a1..db01c1f83b433 100644
--- a/lldb/bindings/interface/SBModuleExtensions.i
+++ b/lldb/bindings/interface/SBModuleExtensions.i
@@ -236,4 +236,10 @@ STRING_EXTENSION_OUTSIDE(SBModule)
 
     %}
 #endif
+
+    UUIDSpan GetUUIDBytes() {
+        return UUIDSpan{ $self->GetUUIDBytes(), $self->GetUUIDLength() };
+    }
 }
+// ignore the original implementation.
+%ignore lldb::SBModule::GetUUIDBytes;
diff --git a/lldb/bindings/interface/SBModuleSpecExtensions.i b/lldb/bindings/interface/SBModuleSpecExtensions.i
index d1f04472a8ce5..ba83d92d78a3e 100644
--- a/lldb/bindings/interface/SBModuleSpecExtensions.i
+++ b/lldb/bindings/interface/SBModuleSpecExtensions.i
@@ -1,3 +1,15 @@
 STRING_EXTENSION_OUTSIDE(SBModuleSpec)
 
 STRING_EXTENSION_OUTSIDE(SBModuleSpecList)
+
+%extend lldb::SBModuleSpec {
+    UUIDSpan GetUUIDBytes() {
+        return UUIDSpan{ $self->GetUUIDBytes(), $self->GetUUIDLength() };
+    }
+
+    bool SetUUIDBytes(UUIDSpan span) { 
+        return $self->SetUUIDBytes(span.data, span.length);
+    }
+}
+// ignore the original implementation.
+%ignore lldb::SBModuleSpec::GetUUIDBytes;
diff --git a/lldb/bindings/interfaces.swig b/lldb/bindings/interfaces.swig
index fddbedf02e835..1207e739d749b 100644
--- a/lldb/bindings/interfaces.swig
+++ b/lldb/bindings/interfaces.swig
@@ -90,6 +90,65 @@
 %include "./interface/SBWatchpointDocstrings.i"
 %include "./interface/SBWatchpointOptionsDocstrings.i"
 
+/* Extensions for SB classes */
+%include "./interface/SBAddressExtensions.i"
+%include "./interface/SBAddressRangeExtensions.i"
+%include "./interface/SBAddressRangeListExtensions.i"
+%include "./interface/SBBlockExtensions.i"
+%include "./interface/SBBreakpointExtensions.i"
+%include "./interface/SBBreakpointListExtensions.i"
+%include "./interface/SBBreakpointLocationExtensions.i"
+%include "./interface/SBBreakpointNameExtensions.i"
+%include "./interface/SBBroadcastExtensions.i"
+%include "./interface/SBCommandReturnObjectExtensions.i"
+%include "./interface/SBCompileUnitExtensions.i"
+%include "./interface/SBDataExtensions.i"
+%include "./interface/SBDebuggerExtensions.i"
+%include "./interface/SBDeclarationExtensions.i"
+%include "./interface/SBErrorExtensions.i"
+%include "./interface/SBExecutionContextExtensions.i"
+%include "./interface/SBFileExtensions.i"
+%include "./interface/SBFileSpecExtensions.i"
+%include "./interface/SBFileSpecListExtensions.i"
+%include "./interface/SBFrameExtensions.i"
+%include "./interface/SBFrameListExtensions.i"
+%include "./interface/SBFunctionExtensions.i"
+%include "./interface/SBInstructionExtensions.i"
+%include "./interface/SBInstructionListExtensions.i"
+%include "./interface/SBLineEntryExtensions.i"
+%include "./interface/SBMemoryRegionInfoExtensions.i"
+%include "./interface/SBMemoryRegionInfoListExtensions.i"
+%include "./interface/SBModuleExtensions.i"
+%include "./interface/SBModuleSpecExtensions.i"
+%include "./interface/SBModuleSpecListExtensions.i"
+%include "./interface/SBProcessExtensions.i"
+%include "./interface/SBProgressExtensions.i"
+%include "./interface/SBProcessInfoListExtensions.i"
+%include "./interface/SBQueueItemExtensions.i"
+%include "./interface/SBScriptObjectExtensions.i"
+%include "./interface/SBSectionExtensions.i"
+%include "./interface/SBStreamExtensions.i"
+%include "./interface/SBStringListExtensions.i"
+%include "./interface/SBStructuredDataExtensions.i"
+%include "./interface/SBSymbolContextExtensions.i"
+%include "./interface/SBSymbolContextListExtensions.i"
+%include "./interface/SBSymbolExtensions.i"
+%include "./interface/SBTargetExtensions.i"
+%include "./interface/SBThreadCollectionExtensions.i"
+%include "./interface/SBThreadExtensions.i"
+%include "./interface/SBTypeCategoryExtensions.i"
+%include "./interface/SBTypeEnumMemberExtensions.i"
+%include "./interface/SBTypeExtensions.i"
+%include "./interface/SBTypeFilterExtensions.i"
+%include "./interface/SBTypeFormatExtensions.i"
+%include "./interface/SBTypeNameSpecifierExtensions.i"
+%include "./interface/SBTypeSummaryExtensions.i"
+%include "./interface/SBTypeSyntheticExtensions.i"
+%include "./interface/SBUnixSignalsExtensions.i"
+%include "./interface/SBValueExtensions.i"
+%include "./interface/SBValueListExtensions.i"
+%include "./interface/SBWatchpointExtensions.i"
+
 /* API headers */
 %include "lldb/API/SBAddress.h"
 %include "lldb/API/SBAddressRange.h"
@@ -172,62 +231,3 @@
 %include "lldb/API/SBVariablesOptions.h"
 %include "lldb/API/SBWatchpoint.h"
 %include "lldb/API/SBWatchpointOptions.h"
-
-/* Extensions for SB classes */
-%include "./interface/SBAddressExtensions.i"
-%include "./interface/SBAddressRangeExtensions.i"
-%include "./interface/SBAddressRangeListExtensions.i"
-%include "./interface/SBBlockExtensions.i"
-%include "./interface/SBBreakpointExtensions.i"
-%include "./interface/SBBreakpointListExtensions.i"
-%include "./interface/SBBreakpointLocationExtensions.i"
-%include "./interface/SBBreakpointNameExtensions.i"
-%include "./interface/SBBroadcastExtensions.i"
-%include "./interface/SBCommandReturnObjectExtensions.i"
-%include "./interface/SBCompileUnitExtensions.i"
-%include "./interface/SBDataExtensions.i"
-%include "./interface/SBDebuggerExtensions.i"
-%include "./interface/SBDeclarationExtensions.i"
-%include "./interface/SBErrorExtensions.i"
-%include "./interface/SBExecutionContextExtensions.i"
-%include "./interface/SBFileExtensions.i"
-%include "./interface/SBFileSpecExtensions.i"
-%include "./interface/SBFileSpecListExtensions.i"
-%include "./interface/SBFrameExtensions.i"
-%include "./interface/SBFrameListExtensions.i"
-%include "./interface/SBFunctionExtensions.i"
-%include "./interface/SBInstructionExtensions.i"
-%include "./interface/SBInstructionListExtensions.i"
-%include "./interface/SBLineEntryExtensions.i"
-%include "./interface/SBMemoryRegionInfoExtensions.i"
-%include "./interface/SBMemoryRegionInfoListExtensions.i"
-%include "./interface/SBModuleExtensions.i"
-%include "./interface/SBModuleSpecExtensions.i"
-%include "./interface/SBModuleSpecListExtensions.i"
-%include "./interface/SBProcessExtensions.i"
-%include "./interface/SBProgressExtensions.i"
-%include "./interface/SBProcessInfoListExtensions.i"
-%include "./interface/SBQueueItemExtensions.i"
-%include "./interface/SBScriptObjectExtensions.i"
-%include "./interface/SBSectionExtensions.i"
-%include "./interface/SBStreamExtensions.i"
-%include "./interface/SBStringListExtensions.i"
-%include "./interface/SBStructuredDataExtensions.i"
-%include "./interface/SBSymbolContextExtensions.i"
-%include "./interface/SBSymbolContextListExtensions.i"
-%include "./interface/SBSymbolExtensions.i"
-%include "./interface/SBTargetExtensions.i"
-%include "./interface/SBThreadCollectionExtensions.i"
-%include "./interface/SBThreadExtensions.i"
-%include "./interface/SBTypeCategoryExtensions.i"
-%include "./interface/SBTypeEnumMemberExtensions.i"
-%include "./interface/SBTypeExtensions.i"
-%include "./interface/SBTypeFilterExtensions.i"
-%include "./interface/SBTypeFormatExtensions.i"
-%include "./interface/SBTypeNameSpecifierExtensions.i"
-%include "./interface/SBTypeSummaryExtensions.i"
-%include "./interface/SBTypeSyntheticExtensions.i"
-%include "./interface/SBUnixSignalsExtensions.i"
-%include "./interface/SBValueExtensions.i"
-%include "./interface/SBValueListExtensions.i"
-%include "./interface/SBWatchpointExtensions.i"
diff --git a/lldb/bindings/lua/lua-typemaps.swig b/lldb/bindings/lua/lua-typemaps.swig
index 51a92473c009a..56cf6f36976db 100644
--- a/lldb/bindings/lua/lua-typemaps.swig
+++ b/lldb/bindings/lua/lua-typemaps.swig
@@ -332,3 +332,31 @@ LLDB_NUMBER_TYPEMAP(enum SWIGTYPE);
 }
 
 //===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+// Typemap for extension SBModuleSpec::SetUUIDBytes()
+%typemap(in) UUIDSpan {
+  if (lua_isnil(L, $input)) {
+    $1.data = NULL;
+    $1.length = 0;
+  } else {
+    $1.data = reinterpret_cast<const uint8_t *>(luaL_checklstring(L, $input, (size_t *)&$1.length));
+  }
+}
+
+%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) UUIDSpan {
+  $1 = (lua_isstring(L, $input) || lua_isnil(L, $input));
+}
+
+%typemap(out) UUIDSpan {
+  const char* data = (const char*)$1.data;
+  const size_t length = (size_t)$1.length;
+
+  if (data != nullptr && length != 0) { 
+    lua_pushlstring(L, data, length);
+  } else { 
+    lua_pushnil(L);
+  }
+  SWIG_arg++;
+}
+//===----------------------------------------------------------------------===//
diff --git a/lldb/bindings/python/python-typemaps.swig b/lldb/bindings/python/python-typemaps.swig
index 072e688c4bde1..824be463f4279 100644
--- a/lldb/bindings/python/python-typemaps.swig
+++ b/lldb/bindings/python/python-typemaps.swig
@@ -734,3 +734,32 @@ template <> bool SetNumberFromPyObject<double>(double &number, PyObject *obj) {
   $1 = $input == Py_None;
   $1 = $1 || PyCallable_Check(reinterpret_cast<PyObject *>($input));
 }
+
+%typemap(in) UUIDSpan {
+  if (PythonByteArray::Check($input)) {
+    PythonByteArray bytearray(PyRefType::Borrowed, $input);
+    $1.data = (uint8_t *)bytearray.GetBytes().data();
+    $1.length = bytearray.GetSize();
+  } else if (PythonBytes::Check($input)) {
+    PythonBytes bytes(PyRefType::Borrowed, $input);
+    $1.data = (uint8_t *)bytes.GetBytes().data();
+    $1.length = bytes.GetSize();
+  } else {
+    PyErr_SetString(PyExc_ValueError, "expecting bytes or bytearray object");
+    SWIG_fail;
+  }
+}
+
+%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) UUIDSpan ""
+
+%typemap(out) UUIDSpan {
+  const uint8_t* data = $1.data;
+  const auto length = static_cast<Py_ssize_t>($1.length);
+  if (data == nullptr || length == 0){
+    $result = Py_None;
+    Py_INCREF($result);
+  } else {
+    $result = PyBytes_FromStringAndSize(
+      reinterpret_cast<const char*>(data), length);
+  }
+}
diff --git a/lldb/include/lldb/API/SBModule.h b/lldb/include/lldb/API/SBModule.h
index 4009ca1461e51..a3ed3af3a179a 100644
--- a/lldb/include/lldb/API/SBModule.h
+++ b/lldb/include/lldb/API/SBModule.h
@@ -104,6 +104,8 @@ class LLDB_API SBModule {
 
   const uint8_t *GetUUIDBytes() const;
 
+  size_t GetUUIDLength() const;
+
   const char *GetUUIDString() const;
 
   bool operator==(const lldb::SBModule &rhs) const;
diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp
index c48d1abd88c56..58b485c09505c 100644
--- a/lldb/source/API/SBModule.cpp
+++ b/lldb/source/API/SBModule.cpp
@@ -177,6 +177,16 @@ const uint8_t *SBModule::GetUUIDBytes() const {
   return uuid_bytes;
 }
 
+size_t SBModule::GetUUIDLength() const {
+  LLDB_INSTRUMENT_VA(this);
+
+  const ModuleSP module_sp(GetSP());
+  if (module_sp)
+    return module_sp->GetUUID().GetBytes().size();
+
+  return 0;
+}
+
 const char *SBModule::GetUUIDString() const {
   LLDB_INSTRUMENT_VA(this);
 
diff --git a/lldb/test/API/lua_api/TestModuleAPI.lua b/lldb/test/API/lua_api/TestModuleAPI.lua
new file mode 100644
index 0000000000000..7dcc21813ee67
--- /dev/null
+++ b/lldb/test/API/lua_api/TestModuleAPI.lua
@@ -0,0 +1,24 @@
+_T = require('lua_lldb_test').create_test('TestModuleAPI')
+
+function _T:TestGetAndSetUUID()
+    local target = self:create_target()
+    local module = target:GetModuleAtIndex(0)
+    assertTrue(module:IsValid())
+
+    local module_uuid_bytes = module:GetUUIDBytes()
+    assertTrue(type(module_uuid_bytes) == "string")
+    local module_uuid_string = module:GetUUIDString()
+    assertTrue(type(module_uuid_string) == "string")
+    local expected_bytes_uuid = module_uuid_bytes:gsub(".",
+        function(c) return string.format("%02x", string.byte(c)) end):upper()
+    assertEqual(module_uuid_string:gsub("-", ""), expected_bytes_uuid)
+
+    local spec = lldb.SBModuleSpec()
+    local bytesres_type = type(spec:GetUUIDBytes())
+    assertTrue(bytesres_type == "nil")
+    local spec_bytes_uuid = "8FB5E28E344ECA77CE1969FD79A9B72AFD27C88F"
+
+    assertTrue(spec:SetUUIDBytes(spec_bytes_uuid))
+    assertEqual(spec:GetUUIDBytes(), spec_bytes_uuid:upper())
+end
+os.exit(_T:run())
diff --git a/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py b/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
index ec5b4da0f29b2..0888e95bf47ae 100644
--- a/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
+++ b/lldb/test/API/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py
@@ -233,6 +233,16 @@ def test_SBModule(self):
 
         sb_module.fuzz_obj(obj)
 
+    def test_SBModuleSpec(self):
+        obj = lldb.SBModuleSpec()
+        if self.TraceOn():
+            print(obj)
+        self.assertFalse(obj)
+        # Do fuzz testing on the invalid obj, it should not crash lldb.
+        import sb_modulespec
+
+        sb_modulespec.fuzz_obj(obj)
+
     def test_SBProcess(self):
         obj = lldb.SBProcess()
         if self.TraceOn():
diff --git a/lldb/test/API/python_api/default-constructor/sb_module.py b/lldb/test/API/python_api/default-constructor/sb_module.py
index 175550a5a0fcc..3ab9d98cb34d0 100644
--- a/lldb/test/API/python_api/default-constructor/sb_module.py
+++ b/lldb/test/API/python_api/default-constructor/sb_module.py
@@ -11,6 +11,8 @@ def fuzz_obj(obj):
     obj.GetPlatformFileSpec()
     obj.SetPlatformFileSpec(lldb.SBFileSpec())
     obj.GetUUIDString()
+    obj.GetUUIDBytes()
+    obj.GetUUIDLength()
     obj.ResolveFileAddress(sys.maxsize)
     obj.ResolveSymbolContextForAddress(lldb.SBAddress(), 0)
     obj.GetDescription(lldb.SBStream())
diff --git a/lldb/test/API/python_api/default-constructor/sb_modulespec.py b/lldb/test/API/python_api/default-constructor/sb_modulespec.py
new file mode 100644
index 0000000000000..8891c0ee1482d
--- /dev/null
+++ b/lldb/test/API/python_api/default-constructor/sb_modulespec.py
@@ -0,0 +1,29 @@
+"""
+Fuzz tests an object after the default construction to make sure it does not crash lldb.
+"""
+
+import lldb
+
+
+def fuzz_obj(obj: lldb.SBModuleSpec):
+    obj.IsValid()
+    obj.GetFileSpec()
+    obj.GetPlatformFileSpec()
+    obj.SetPlatformFileSpec(lldb.SBFileSpec())
+    obj.GetSymbolFileSpec()
+    obj.SetSymbolFileSpec(lldb.SBFileSpec())
+    obj.GetObjectName()
+    obj.SetObjectName("some object")
+    obj.GetTriple()
+    obj.SetTriple("a triple")
+    obj.GetUUIDBytes()
+    obj.GetUUIDLength()
+    obj.SetUUIDBytes("SOMEBYTES".encode())
+    obj.GetObjectOffset()
+    obj.SetObjectOffset(320)
+    obj.GetObjectSize()
+    obj.SetObjectSize(3290)
+    obj.GetDescription(lldb.SBStream())
+    obj.GetTarget()
+    obj.SetTarget(lldb.SBTarget())
+    obj.Clear()
diff --git a/lldb/test/API/python_api/sbmodulespec/TestSBModuleSpec.py b/lldb/test/API/python_api/sbmodulespec/TestSBModuleSpec.py
new file mode 100644
index 0000000000000..d651d05d9c1e6
--- /dev/null
+++ b/lldb/test/API/python_api/sbmodulespec/TestSBModuleSpec.py
@@ -0,0 +1,16 @@
+"""Test the SBModuleSpec APIs."""
+
+import lldb
+from lldbsuite.test.lldbtest import TestBase
+
+
+class TestSBModuleSpec(TestBase):
+    NO_DEBUG_INFO_TESTCASE = True
+
+    def test(self):
+        spec = lldb.SBModuleSpec()
+        self.assertIsNone(spec.GetUUIDBytes())
+
+        spec_uuid = "8FB5E28E344ECA77CE1969FD79A9B72AFD27C88F".encode("ascii")
+        self.assertTrue(spec.SetUUIDBytes(spec_uuid))
+        self.assertEqual(spec.GetUUIDBytes(), spec_uuid)
diff --git a/lldb/test/API/python_api/sbplatform/TestLocateModuleCallback.py b/lldb/test/API/python_api/sbplatform/TestLocateModuleCallback.py
index 0e3bdf50124bb..b8c3fdea7e0cd 100644
--- a/lldb/test/API/python_api/sbplatform/TestLocateModuleCallback.py
+++ b/lldb/test/API/python_api/sbplatform/TestLocateModuleCallback.py
@@ -39,12 +39,7 @@ def setUp(self):
     def check_module_spec(self, module_spec: lldb.SBModuleSpec):
         self.assertEqual(
             MODULE_UUID.replace("-", ""),
-            ctypes.string_at(
-                int(module_spec.GetUUIDBytes()),
-                module_spec.GetUUIDLength(),
-            )
-            .hex()
-            .upper(),
+            module_spec.GetUUIDBytes().hex().upper(),
         )
 
         self.assertEqual(MODULE_TRIPLE, module_spec.GetTriple())
@@ -60,6 +55,8 @@ def check_module(self, module: lldb.SBModule, symbol_file: str, symbol_kind: str
             MODULE_UUID,
             module.GetUUIDString(),
         )
+        uuid_bytes = module.GetUUIDBytes()
+        self.assertEqual(MODULE_UUID.replace("-", ""), uuid_bytes.hex().upper())
 
         self.assertEqual(MODULE_RESOLVED_TRIPLE, module.GetTriple())
 
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 91b150c9fe982..d478926f4797a 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -201,6 +201,9 @@ Changes to the LLVM tools
 Changes to LLDB
 ---------------
 
+* `SBModule::GetUUIDBytes` and `SBModuleSpec::GetUUIDBytes` now return `bytes` in python and `string` in lua.
+* You can now pass `bytes` or `bytesarray` to `SBModuleSpec::SetUUIDBytes` in python and `string` in lua.
+
 ### Deprecated APIs
 
 * ``SBTarget::GetDataByteSize()``, ``SBTarget::GetCodeByteSize()``, and ``SBSection::GetTargetByteSize()``

>From 4e1ff0291985c1df7c10d6822ae5166058b5d636 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Fri, 13 Mar 2026 12:13:19 +0000
Subject: [PATCH 2/2] add review changes

---
 lldb/source/API/SBModule.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp
index 58b485c09505c..a5285802dd76a 100644
--- a/lldb/source/API/SBModule.cpp
+++ b/lldb/source/API/SBModule.cpp
@@ -180,8 +180,7 @@ const uint8_t *SBModule::GetUUIDBytes() const {
 size_t SBModule::GetUUIDLength() const {
   LLDB_INSTRUMENT_VA(this);
 
-  const ModuleSP module_sp(GetSP());
-  if (module_sp)
+  if (ModuleSP module_sp = GetSP())
     return module_sp->GetUUID().GetBytes().size();
 
   return 0;



More information about the lldb-commits mailing list