[Lldb-commits] [lldb] 901ba0f - [lldb] Implement SymbolFile::CopyType
Augusto Noronha via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 20 13:02:14 PST 2023
Author: Augusto Noronha
Date: 2023-01-20T13:02:04-08:00
New Revision: 901ba0fcae3651c81051fd8da2695bbc2bcb3c91
URL: https://github.com/llvm/llvm-project/commit/901ba0fcae3651c81051fd8da2695bbc2bcb3c91
DIFF: https://github.com/llvm/llvm-project/commit/901ba0fcae3651c81051fd8da2695bbc2bcb3c91.diff
LOG: [lldb] Implement SymbolFile::CopyType
SymbolFiles should be the only point of creation of Types to ensure
that they aren't destroyed prematurely by keeping them in the
SymbolFile's TypeList. This patch hides the copy constructor of Types,
and adds a new CopyType function to SymbolFile, so Types can still be
copied safely.
Differential Revision: https://reviews.llvm.org/D142052
Added:
Modified:
lldb/include/lldb/Symbol/SymbolFile.h
lldb/include/lldb/Symbol/SymbolFileOnDemand.h
lldb/include/lldb/Symbol/Type.h
Removed:
################################################################################
diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h
index 1be3323f715be..8548973bad3ff 100644
--- a/lldb/include/lldb/Symbol/SymbolFile.h
+++ b/lldb/include/lldb/Symbol/SymbolFile.h
@@ -421,6 +421,8 @@ class SymbolFile : public PluginInterface {
Type::ResolveState compiler_type_resolve_state,
uint32_t opaque_payload = 0) = 0;
+ virtual lldb::TypeSP CopyType(const lldb::TypeSP &other_type) = 0;
+
protected:
void AssertModuleLock();
@@ -521,6 +523,15 @@ class SymbolFileCommon : public SymbolFile {
return type_sp;
}
+ lldb::TypeSP CopyType(const lldb::TypeSP &other_type) override {
+ // Make sure the real symbol file matches when copying types.
+ if (GetBackingSymbolFile() != other_type->GetSymbolFile())
+ return lldb::TypeSP();
+ lldb::TypeSP type_sp(new Type(*other_type));
+ m_type_list.Insert(type_sp);
+ return type_sp;
+ }
+
protected:
virtual uint32_t CalculateNumCompileUnits() = 0;
virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t idx) = 0;
diff --git a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
index b615356246c64..825fba755e990 100644
--- a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
+++ b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
@@ -241,6 +241,10 @@ class SymbolFileOnDemand : public lldb_private::SymbolFile {
compiler_qual_type, compiler_type_resolve_state, opaque_payload);
}
+ lldb::TypeSP CopyType(const lldb::TypeSP &other_type) override {
+ return m_sym_file_impl->CopyType(other_type);
+ }
+
private:
Log *GetLog() const { return ::lldb_private::GetLog(LLDBLog::OnDemand); }
diff --git a/lldb/include/lldb/Symbol/Type.h b/lldb/include/lldb/Symbol/Type.h
index fa494172219c9..046501931d211 100644
--- a/lldb/include/lldb/Symbol/Type.h
+++ b/lldb/include/lldb/Symbol/Type.h
@@ -241,6 +241,14 @@ class Type : public std::enable_shared_from_this<Type>, public UserID {
// This makes an invalid type. Used for functions that return a Type when
// they get an error.
Type();
+
+ Type(Type &t) = default;
+
+ Type(Type &&t) = default;
+
+ Type &operator=(const Type &t) = default;
+
+ Type &operator=(Type &&t) = default;
};
// the two classes here are used by the public API as a backend to the SBType
More information about the lldb-commits
mailing list