[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