[Lldb-commits] [lldb] [lldb][NFC] Use unique_ptr for SearchFilter (PR #203239)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 11 03:46:07 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Felipe de Azevedo Piovezan (felipepiovezan)
<details>
<summary>Changes</summary>
While originally we did not have a better option, ownership of SearchFilters is more precisely represented using unique_ptrs. If, in the future, any of the use sites here truly requires shared ownership, the conversion at the site that requires it is trivial (it can even be done implicitly).
---
Full diff: https://github.com/llvm/llvm-project/pull/203239.diff
4 Files Affected:
- (modified) lldb/include/lldb/Core/SearchFilter.h (+16-16)
- (modified) lldb/include/lldb/Target/LanguageRuntime.h (+1-1)
- (modified) lldb/source/Core/SearchFilter.cpp (+49-55)
- (modified) lldb/source/Target/LanguageRuntime.cpp (+2-3)
``````````diff
diff --git a/lldb/include/lldb/Core/SearchFilter.h b/lldb/include/lldb/Core/SearchFilter.h
index 7645499e948d0..60614311d6bd7 100644
--- a/lldb/include/lldb/Core/SearchFilter.h
+++ b/lldb/include/lldb/Core/SearchFilter.h
@@ -197,10 +197,10 @@ class SearchFilter {
/// Standard "Dump" method. At present it does nothing.
virtual void Dump(Stream *s) const;
- lldb::SearchFilterSP CreateCopy(lldb::TargetSP& target_sp);
+ std::unique_ptr<SearchFilter> CreateCopy(lldb::TargetSP &target_sp);
- static lldb::SearchFilterSP
- CreateFromStructuredData(const lldb::TargetSP& target_sp,
+ static std::unique_ptr<SearchFilter>
+ CreateFromStructuredData(const lldb::TargetSP &target_sp,
const StructuredData::Dictionary &data_dict,
Status &error);
@@ -271,7 +271,7 @@ class SearchFilter {
const SymbolContext &context,
Searcher &searcher);
- virtual lldb::SearchFilterSP DoCreateCopy() = 0;
+ virtual std::unique_ptr<SearchFilter> DoCreateCopy() = 0;
void SetTarget(lldb::TargetSP &target_sp) { m_target_sp = target_sp; }
@@ -297,15 +297,15 @@ class SearchFilterForUnconstrainedSearches : public SearchFilter {
bool ModulePasses(const lldb::ModuleSP &module_sp) override;
- static lldb::SearchFilterSP
- CreateFromStructuredData(const lldb::TargetSP& target_sp,
+ static std::unique_ptr<SearchFilter>
+ CreateFromStructuredData(const lldb::TargetSP &target_sp,
const StructuredData::Dictionary &data_dict,
Status &error);
StructuredData::ObjectSP SerializeToStructuredData() override;
protected:
- lldb::SearchFilterSP DoCreateCopy() override;
+ std::unique_ptr<SearchFilter> DoCreateCopy() override;
};
/// \class SearchFilterByModule SearchFilter.h "lldb/Core/SearchFilter.h" This
@@ -339,15 +339,15 @@ class SearchFilterByModule : public SearchFilter {
void Search(Searcher &searcher) override;
- static lldb::SearchFilterSP
- CreateFromStructuredData(const lldb::TargetSP& target_sp,
+ static std::unique_ptr<SearchFilter>
+ CreateFromStructuredData(const lldb::TargetSP &target_sp,
const StructuredData::Dictionary &data_dict,
Status &error);
StructuredData::ObjectSP SerializeToStructuredData() override;
protected:
- lldb::SearchFilterSP DoCreateCopy() override;
+ std::unique_ptr<SearchFilter> DoCreateCopy() override;
private:
FileSpec m_module_spec;
@@ -386,8 +386,8 @@ class SearchFilterByModuleList : public SearchFilter {
void Search(Searcher &searcher) override;
- static lldb::SearchFilterSP
- CreateFromStructuredData(const lldb::TargetSP& target_sp,
+ static std::unique_ptr<SearchFilter>
+ CreateFromStructuredData(const lldb::TargetSP &target_sp,
const StructuredData::Dictionary &data_dict,
Status &error);
@@ -396,7 +396,7 @@ class SearchFilterByModuleList : public SearchFilter {
void SerializeUnwrapped(StructuredData::DictionarySP &options_dict_sp);
protected:
- lldb::SearchFilterSP DoCreateCopy() override;
+ std::unique_ptr<SearchFilter> DoCreateCopy() override;
FileSpecList m_module_spec_list;
};
@@ -425,15 +425,15 @@ class SearchFilterByModuleListAndCU : public SearchFilterByModuleList {
void Search(Searcher &searcher) override;
- static lldb::SearchFilterSP
- CreateFromStructuredData(const lldb::TargetSP& target_sp,
+ static std::unique_ptr<SearchFilter>
+ CreateFromStructuredData(const lldb::TargetSP &target_sp,
const StructuredData::Dictionary &data_dict,
Status &error);
StructuredData::ObjectSP SerializeToStructuredData() override;
protected:
- lldb::SearchFilterSP DoCreateCopy() override;
+ std::unique_ptr<SearchFilter> DoCreateCopy() override;
private:
FileSpecList m_cu_spec_list;
diff --git a/lldb/include/lldb/Target/LanguageRuntime.h b/lldb/include/lldb/Target/LanguageRuntime.h
index 7e4c11df0da7f..05a480ed15184 100644
--- a/lldb/include/lldb/Target/LanguageRuntime.h
+++ b/lldb/include/lldb/Target/LanguageRuntime.h
@@ -53,7 +53,7 @@ class ExceptionSearchFilter : public SearchFilter {
LanguageRuntime *m_language_runtime;
lldb::SearchFilterSP m_filter_sp;
- lldb::SearchFilterSP DoCreateCopy() override;
+ std::unique_ptr<SearchFilter> DoCreateCopy() override;
void UpdateModuleListIfNeeded();
};
diff --git a/lldb/source/Core/SearchFilter.cpp b/lldb/source/Core/SearchFilter.cpp
index e14beba1fe40c..543aa5b2f8edd 100644
--- a/lldb/source/Core/SearchFilter.cpp
+++ b/lldb/source/Core/SearchFilter.cpp
@@ -74,15 +74,13 @@ SearchFilter::SearchFilter(const TargetSP &target_sp, unsigned char filterType)
SearchFilter::~SearchFilter() = default;
-SearchFilterSP SearchFilter::CreateFromStructuredData(
- const lldb::TargetSP& target_sp,
- const StructuredData::Dictionary &filter_dict,
- Status &error) {
- SearchFilterSP result_sp;
+std::unique_ptr<SearchFilter> SearchFilter::CreateFromStructuredData(
+ const lldb::TargetSP &target_sp,
+ const StructuredData::Dictionary &filter_dict, Status &error) {
if (!filter_dict.IsValid()) {
error = Status::FromErrorString(
"Can't deserialize from an invalid data object.");
- return result_sp;
+ return nullptr;
}
llvm::StringRef subclass_name;
@@ -91,14 +89,14 @@ SearchFilterSP SearchFilter::CreateFromStructuredData(
GetSerializationSubclassKey(), subclass_name);
if (!success) {
error = Status::FromErrorString("Filter data missing subclass key");
- return result_sp;
+ return nullptr;
}
FilterTy filter_type = NameToFilterTy(subclass_name);
if (filter_type == UnknownFilter) {
error = Status::FromErrorStringWithFormatv("Unknown filter type: {0}.",
subclass_name);
- return result_sp;
+ return nullptr;
}
StructuredData::Dictionary *subclass_options = nullptr;
@@ -107,26 +105,22 @@ SearchFilterSP SearchFilter::CreateFromStructuredData(
if (!success || !subclass_options || !subclass_options->IsValid()) {
error =
Status::FromErrorString("Filter data missing subclass options key.");
- return result_sp;
+ return nullptr;
}
switch (filter_type) {
case Unconstrained:
- result_sp = SearchFilterForUnconstrainedSearches::CreateFromStructuredData(
+ return SearchFilterForUnconstrainedSearches::CreateFromStructuredData(
target_sp, *subclass_options, error);
- break;
case ByModule:
- result_sp = SearchFilterByModule::CreateFromStructuredData(
+ return SearchFilterByModule::CreateFromStructuredData(
target_sp, *subclass_options, error);
- break;
case ByModules:
- result_sp = SearchFilterByModuleList::CreateFromStructuredData(
+ return SearchFilterByModuleList::CreateFromStructuredData(
target_sp, *subclass_options, error);
- break;
case ByModulesAndCU:
- result_sp = SearchFilterByModuleListAndCU::CreateFromStructuredData(
+ return SearchFilterByModuleListAndCU::CreateFromStructuredData(
target_sp, *subclass_options, error);
- break;
case Exception:
error =
Status::FromErrorString("Can't serialize exception breakpoints yet.");
@@ -135,7 +129,7 @@ SearchFilterSP SearchFilter::CreateFromStructuredData(
llvm_unreachable("Should never get an uresolvable filter type.");
}
- return result_sp;
+ return nullptr;
}
bool SearchFilter::ModulePasses(const FileSpec &spec) { return true; }
@@ -165,10 +159,11 @@ void SearchFilter::GetDescription(Stream *s) {}
void SearchFilter::Dump(Stream *s) const {}
-lldb::SearchFilterSP SearchFilter::CreateCopy(lldb::TargetSP& target_sp) {
- SearchFilterSP ret_sp = DoCreateCopy();
- ret_sp->SetTarget(target_sp);
- return ret_sp;
+std::unique_ptr<SearchFilter>
+SearchFilter::CreateCopy(lldb::TargetSP &target_sp) {
+ std::unique_ptr<SearchFilter> ret = DoCreateCopy();
+ ret->SetTarget(target_sp);
+ return ret;
}
// Helper functions for serialization.
@@ -358,12 +353,12 @@ Searcher::CallbackReturn SearchFilter::DoFunctionIteration(
// SearchFilterForUnconstrainedSearches:
// Selects a shared library matching a given file spec, consulting the targets
// "black list".
-SearchFilterSP SearchFilterForUnconstrainedSearches::CreateFromStructuredData(
- const lldb::TargetSP& target_sp,
- const StructuredData::Dictionary &data_dict,
- Status &error) {
+std::unique_ptr<SearchFilter>
+SearchFilterForUnconstrainedSearches::CreateFromStructuredData(
+ const lldb::TargetSP &target_sp,
+ const StructuredData::Dictionary &data_dict, Status &error) {
// No options for an unconstrained search.
- return std::make_shared<SearchFilterForUnconstrainedSearches>(target_sp);
+ return std::make_unique<SearchFilterForUnconstrainedSearches>(target_sp);
}
StructuredData::ObjectSP
@@ -387,8 +382,9 @@ bool SearchFilterForUnconstrainedSearches::ModulePasses(
return true;
}
-SearchFilterSP SearchFilterForUnconstrainedSearches::DoCreateCopy() {
- return std::make_shared<SearchFilterForUnconstrainedSearches>(*this);
+std::unique_ptr<SearchFilter>
+SearchFilterForUnconstrainedSearches::DoCreateCopy() {
+ return std::make_unique<SearchFilterForUnconstrainedSearches>(*this);
}
// SearchFilterByModule:
@@ -449,14 +445,13 @@ uint32_t SearchFilterByModule::GetFilterRequiredItems() {
void SearchFilterByModule::Dump(Stream *s) const {}
-SearchFilterSP SearchFilterByModule::DoCreateCopy() {
- return std::make_shared<SearchFilterByModule>(*this);
+std::unique_ptr<SearchFilter> SearchFilterByModule::DoCreateCopy() {
+ return std::make_unique<SearchFilterByModule>(*this);
}
-SearchFilterSP SearchFilterByModule::CreateFromStructuredData(
- const lldb::TargetSP& target_sp,
- const StructuredData::Dictionary &data_dict,
- Status &error) {
+std::unique_ptr<SearchFilter> SearchFilterByModule::CreateFromStructuredData(
+ const lldb::TargetSP &target_sp,
+ const StructuredData::Dictionary &data_dict, Status &error) {
StructuredData::Array *modules_array;
bool success = data_dict.GetValueForKeyAsArray(GetKey(OptionNames::ModList),
modules_array);
@@ -482,7 +477,7 @@ SearchFilterSP SearchFilterByModule::CreateFromStructuredData(
}
FileSpec module_spec(*maybe_module);
- return std::make_shared<SearchFilterByModule>(target_sp, module_spec);
+ return std::make_unique<SearchFilterByModule>(target_sp, module_spec);
}
StructuredData::ObjectSP SearchFilterByModule::SerializeToStructuredData() {
@@ -583,20 +578,20 @@ uint32_t SearchFilterByModuleList::GetFilterRequiredItems() {
void SearchFilterByModuleList::Dump(Stream *s) const {}
-lldb::SearchFilterSP SearchFilterByModuleList::DoCreateCopy() {
- return std::make_shared<SearchFilterByModuleList>(*this);
+std::unique_ptr<SearchFilter> SearchFilterByModuleList::DoCreateCopy() {
+ return std::make_unique<SearchFilterByModuleList>(*this);
}
-SearchFilterSP SearchFilterByModuleList::CreateFromStructuredData(
- const lldb::TargetSP& target_sp,
- const StructuredData::Dictionary &data_dict,
- Status &error) {
+std::unique_ptr<SearchFilter>
+SearchFilterByModuleList::CreateFromStructuredData(
+ const lldb::TargetSP &target_sp,
+ const StructuredData::Dictionary &data_dict, Status &error) {
StructuredData::Array *modules_array;
bool success = data_dict.GetValueForKeyAsArray(GetKey(OptionNames::ModList),
modules_array);
if (!success)
- return std::make_shared<SearchFilterByModuleList>(target_sp,
+ return std::make_unique<SearchFilterByModuleList>(target_sp,
FileSpecList{});
FileSpecList modules;
size_t num_modules = modules_array->GetSize();
@@ -610,7 +605,7 @@ SearchFilterSP SearchFilterByModuleList::CreateFromStructuredData(
}
modules.EmplaceBack(*maybe_module);
}
- return std::make_shared<SearchFilterByModuleList>(target_sp, modules);
+ return std::make_unique<SearchFilterByModuleList>(target_sp, modules);
}
void SearchFilterByModuleList::SerializeUnwrapped(
@@ -637,12 +632,11 @@ SearchFilterByModuleListAndCU::SearchFilterByModuleListAndCU(
SearchFilterByModuleListAndCU::~SearchFilterByModuleListAndCU() = default;
-lldb::SearchFilterSP SearchFilterByModuleListAndCU::CreateFromStructuredData(
- const lldb::TargetSP& target_sp,
- const StructuredData::Dictionary &data_dict,
- Status &error) {
+std::unique_ptr<SearchFilter>
+SearchFilterByModuleListAndCU::CreateFromStructuredData(
+ const lldb::TargetSP &target_sp,
+ const StructuredData::Dictionary &data_dict, Status &error) {
StructuredData::Array *modules_array = nullptr;
- SearchFilterSP result_sp;
bool success = data_dict.GetValueForKeyAsArray(GetKey(OptionNames::ModList),
modules_array);
FileSpecList modules;
@@ -654,7 +648,7 @@ lldb::SearchFilterSP SearchFilterByModuleListAndCU::CreateFromStructuredData(
if (!maybe_module) {
error = Status::FromErrorStringWithFormat(
"SFBM::CFSD: filter module item %zu not a string.", i);
- return result_sp;
+ return nullptr;
}
modules.EmplaceBack(*maybe_module);
}
@@ -666,7 +660,7 @@ lldb::SearchFilterSP SearchFilterByModuleListAndCU::CreateFromStructuredData(
if (!success) {
error =
Status::FromErrorString("SFBM::CFSD: Could not find the CU list key.");
- return result_sp;
+ return nullptr;
}
size_t num_cus = cus_array->GetSize();
@@ -682,8 +676,8 @@ lldb::SearchFilterSP SearchFilterByModuleListAndCU::CreateFromStructuredData(
cus.EmplaceBack(*maybe_cu);
}
- return std::make_shared<SearchFilterByModuleListAndCU>(
- target_sp, modules, cus);
+ return std::make_unique<SearchFilterByModuleListAndCU>(target_sp, modules,
+ cus);
}
StructuredData::ObjectSP
@@ -803,6 +797,6 @@ uint32_t SearchFilterByModuleListAndCU::GetFilterRequiredItems() {
void SearchFilterByModuleListAndCU::Dump(Stream *s) const {}
-SearchFilterSP SearchFilterByModuleListAndCU::DoCreateCopy() {
- return std::make_shared<SearchFilterByModuleListAndCU>(*this);
+std::unique_ptr<SearchFilter> SearchFilterByModuleListAndCU::DoCreateCopy() {
+ return std::make_unique<SearchFilterByModuleListAndCU>(*this);
}
diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp
index 7aa89e7432870..c06d37e0a2759 100644
--- a/lldb/source/Target/LanguageRuntime.cpp
+++ b/lldb/source/Target/LanguageRuntime.cpp
@@ -78,9 +78,8 @@ void ExceptionSearchFilter::UpdateModuleListIfNeeded() {
}
}
-SearchFilterSP ExceptionSearchFilter::DoCreateCopy() {
- return SearchFilterSP(
- new ExceptionSearchFilter(TargetSP(), m_language, false));
+std::unique_ptr<SearchFilter> ExceptionSearchFilter::DoCreateCopy() {
+ return std::make_unique<ExceptionSearchFilter>(TargetSP(), m_language, false);
}
SearchFilter *ExceptionSearchFilter::CreateFromStructuredData(
``````````
</details>
https://github.com/llvm/llvm-project/pull/203239
More information about the lldb-commits
mailing list