-
Notifications
You must be signed in to change notification settings - Fork 15.1k
[lldb] Add templated CompilerType::GetTypeSystem (NFC) #140424
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
kastiglione
merged 1 commit into
llvm:main
from
kastiglione:lldb-Add-templated-CompilerType-GetTypeSystem-NFC
May 21, 2025
Merged
[lldb] Add templated CompilerType::GetTypeSystem (NFC) #140424
kastiglione
merged 1 commit into
llvm:main
from
kastiglione:lldb-Add-templated-CompilerType-GetTypeSystem-NFC
May 21, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
@llvm/pr-subscribers-lldb Author: Dave Lee (kastiglione) ChangesFull diff: https://github.com/llvm/llvm-project/pull/140424.diff 13 Files Affected:
diff --git a/lldb/include/lldb/Symbol/CompilerType.h b/lldb/include/lldb/Symbol/CompilerType.h
index b8badfda92cf3..df8489a7fe582 100644
--- a/lldb/include/lldb/Symbol/CompilerType.h
+++ b/lldb/include/lldb/Symbol/CompilerType.h
@@ -276,6 +276,11 @@ class CompilerType {
/// TypeSystem::TypeSystemSPWrapper can be compared for equality.
TypeSystemSPWrapper GetTypeSystem() const;
+ template <typename TypeSystemType>
+ std::shared_ptr<TypeSystemType> GetTypeSystem() const {
+ return GetTypeSystem().dyn_cast_or_null<TypeSystemType>();
+ }
+
ConstString GetTypeName(bool BaseOnly = false) const;
ConstString GetDisplayTypeName() const;
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
index db9a6dd197b3a..c8c8ba53e3bae 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
@@ -37,7 +37,7 @@ CompilerType ClangASTImporter::CopyType(TypeSystemClang &dst_ast,
const CompilerType &src_type) {
clang::ASTContext &dst_clang_ast = dst_ast.getASTContext();
- auto src_ast = src_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto src_ast = src_type.GetTypeSystem<TypeSystemClang>();
if (!src_ast)
return CompilerType();
@@ -307,7 +307,7 @@ CompilerType ClangASTImporter::DeportType(TypeSystemClang &dst,
const CompilerType &src_type) {
Log *log = GetLog(LLDBLog::Expressions);
- auto src_ctxt = src_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto src_ctxt = src_type.GetTypeSystem<TypeSystemClang>();
if (!src_ctxt)
return {};
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
index 34129807277d5..4b52f6aafcb75 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
@@ -1477,8 +1477,7 @@ ClangASTImporter::DeclOrigin ClangASTSource::GetDeclOrigin(const clang::Decl *de
}
CompilerType ClangASTSource::GuardedCopyType(const CompilerType &src_type) {
- auto ts = src_type.GetTypeSystem();
- auto src_ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto src_ast = src_type.GetTypeSystem<TypeSystemClang>();
if (!src_ast)
return {};
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
index 667cb8a900459..db4973b4a4d3e 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
@@ -219,7 +219,7 @@ bool ClangExpressionDeclMap::AddPersistentVariable(const NamedDecl *decl,
bool is_result,
bool is_lvalue) {
assert(m_parser_vars.get());
- auto ast = parser_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto ast = parser_type.GetTypeSystem<TypeSystemClang>();
if (ast == nullptr)
return false;
@@ -1486,8 +1486,8 @@ bool ClangExpressionDeclMap::GetVariableValue(VariableSP &var,
return false;
}
- auto ts = var_type->GetForwardCompilerType().GetTypeSystem();
- auto clang_ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto clang_ast =
+ var_type->GetForwardCompilerType().GetTypeSystem<TypeSystemClang>();
if (!clang_ast) {
LLDB_LOG(log, "Skipped a definition because it has no Clang AST");
@@ -1606,8 +1606,7 @@ void ClangExpressionDeclMap::AddOneVariable(
TypeFromUser user_type = valobj->GetCompilerType();
- auto clang_ast =
- user_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto clang_ast = user_type.GetTypeSystem<TypeSystemClang>();
if (!clang_ast) {
LLDB_LOG(log, "Skipped a definition because it has no Clang AST");
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangUtil.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangUtil.cpp
index 4cda426e72704..20de4b7f735e7 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangUtil.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangUtil.cpp
@@ -19,7 +19,7 @@ bool ClangUtil::IsClangType(const CompilerType &ct) {
if (!ct)
return false;
- if (!ct.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>())
+ if (!ct.GetTypeSystem<TypeSystemClang>())
return false;
if (!ct.GetOpaqueQualType())
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/NameSearchContext.cpp b/lldb/source/Plugins/ExpressionParser/Clang/NameSearchContext.cpp
index da59855a9f162..45ad4f1ad98b9 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/NameSearchContext.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/NameSearchContext.cpp
@@ -19,7 +19,7 @@ clang::NamedDecl *NameSearchContext::AddVarDecl(const CompilerType &type) {
if (!type.IsValid())
return nullptr;
- auto lldb_ast = type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto lldb_ast = type.GetTypeSystem<TypeSystemClang>();
if (!lldb_ast)
return nullptr;
@@ -45,7 +45,7 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type,
if (m_function_types.count(type))
return nullptr;
- auto lldb_ast = type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto lldb_ast = type.GetTypeSystem<TypeSystemClang>();
if (!lldb_ast)
return nullptr;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
index 23e83616e0843..9ab1bf03250b1 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
@@ -50,8 +50,8 @@ class BlockPointerSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return;
}
- auto ts = block_pointer_type.GetTypeSystem();
- auto clang_ast_context = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto clang_ast_context =
+ block_pointer_type.GetTypeSystem<TypeSystemClang>();
if (!clang_ast_context)
return;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
index 376555936e89d..d3cdb231fbb01 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
@@ -141,8 +141,7 @@ lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::Update() {
if (frame_ptr_addr == 0 || frame_ptr_addr == LLDB_INVALID_ADDRESS)
return lldb::ChildCacheState::eRefetch;
- auto ts = valobj_sp->GetCompilerType().GetTypeSystem();
- auto ast_ctx = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast_ctx = valobj_sp->GetCompilerType().GetTypeSystem<TypeSystemClang>();
if (!ast_ctx)
return lldb::ChildCacheState::eRefetch;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
index e3a866e2b6d48..0c26c276cc530 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -1531,8 +1531,7 @@ void DWARFASTParserClang::ParseInheritance(
const lldb::ModuleSP &module_sp,
std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> &base_classes,
ClangASTImporter::LayoutInfo &layout_info) {
- auto ast =
- class_clang_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto ast = class_clang_type.GetTypeSystem<TypeSystemClang>();
if (ast == nullptr)
return;
@@ -2823,7 +2822,7 @@ llvm::Expected<llvm::APInt> DWARFASTParserClang::ExtractIntFromFormValue(
const CompilerType &int_type, const DWARFFormValue &form_value) const {
clang::QualType qt = ClangUtil::GetQualType(int_type);
assert(qt->isIntegralOrEnumerationType());
- auto ts_ptr = int_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto ts_ptr = int_type.GetTypeSystem<TypeSystemClang>();
if (!ts_ptr)
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"TypeSystem not clang");
@@ -3131,8 +3130,7 @@ bool DWARFASTParserClang::ParseChildMembers(
FieldInfo last_field_info;
ModuleSP module_sp = parent_die.GetDWARF()->GetObjectFile()->GetModule();
- auto ts = class_clang_type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = class_clang_type.GetTypeSystem<TypeSystemClang>();
if (ast == nullptr)
return false;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 0fc7f79be70ec..3f2f1a3b427dc 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1538,8 +1538,7 @@ bool SymbolFileDWARF::HasForwardDeclForCompilerType(
compiler_type_no_qualifiers.GetOpaqueQualType())) {
return true;
}
- auto type_system = compiler_type.GetTypeSystem();
- auto clang_type_system = type_system.dyn_cast_or_null<TypeSystemClang>();
+ auto clang_type_system = compiler_type.GetTypeSystem<TypeSystemClang>();
if (!clang_type_system)
return false;
DWARFASTParserClang *ast_parser =
@@ -1549,8 +1548,7 @@ bool SymbolFileDWARF::HasForwardDeclForCompilerType(
bool SymbolFileDWARF::CompleteType(CompilerType &compiler_type) {
std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
- auto clang_type_system =
- compiler_type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto clang_type_system = compiler_type.GetTypeSystem<TypeSystemClang>();
if (clang_type_system) {
DWARFASTParserClang *ast_parser =
static_cast<DWARFASTParserClang *>(clang_type_system->GetDWARFParser());
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index ce0360120efeb..dadc969c48a3a 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -2141,8 +2141,7 @@ SymbolFileNativePDB::GetDynamicArrayInfoForUID(
bool SymbolFileNativePDB::CompleteType(CompilerType &compiler_type) {
std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
- auto ts = compiler_type.GetTypeSystem();
- auto clang_type_system = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto clang_type_system = compiler_type.GetTypeSystem<TypeSystemClang>();
if (!clang_type_system)
return false;
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
index 28081e8f6b965..bc9a41b58c0d7 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -1135,7 +1135,7 @@ CompilerType TypeSystemClang::GetCStringType(bool is_const) {
bool TypeSystemClang::AreTypesSame(CompilerType type1, CompilerType type2,
bool ignore_qualifiers) {
- auto ast = type1.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type1.GetTypeSystem<TypeSystemClang>();
if (!ast || type1.GetTypeSystem() != type2.GetTypeSystem())
return false;
@@ -7333,8 +7333,7 @@ clang::FieldDecl *TypeSystemClang::AddFieldToRecordType(
uint32_t bitfield_bit_size) {
if (!type.IsValid() || !field_clang_type.IsValid())
return nullptr;
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return nullptr;
clang::ASTContext &clang_ast = ast->getASTContext();
@@ -7437,8 +7436,7 @@ void TypeSystemClang::BuildIndirectFields(const CompilerType &type) {
if (!type)
return;
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return;
@@ -7544,8 +7542,7 @@ void TypeSystemClang::BuildIndirectFields(const CompilerType &type) {
void TypeSystemClang::SetIsPacked(const CompilerType &type) {
if (type) {
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (ast) {
clang::RecordDecl *record_decl = GetAsRecordDecl(type);
@@ -7564,8 +7561,7 @@ clang::VarDecl *TypeSystemClang::AddVariableToRecordType(
if (!type.IsValid() || !var_type.IsValid())
return nullptr;
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return nullptr;
@@ -7890,8 +7886,7 @@ bool TypeSystemClang::TransferBaseClasses(
bool TypeSystemClang::SetObjCSuperClass(
const CompilerType &type, const CompilerType &superclass_clang_type) {
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return false;
clang::ASTContext &clang_ast = ast->getASTContext();
@@ -7919,8 +7914,7 @@ bool TypeSystemClang::AddObjCClassProperty(
if (!type || !property_clang_type.IsValid() || property_name == nullptr ||
property_name[0] == '\0')
return false;
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return false;
clang::ASTContext &clang_ast = ast->getASTContext();
@@ -8139,8 +8133,7 @@ clang::ObjCMethodDecl *TypeSystemClang::AddMethodToObjCObjectType(
if (class_interface_decl == nullptr)
return nullptr;
- auto ts = type.GetTypeSystem();
- auto lldb_ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto lldb_ast = type.GetTypeSystem<TypeSystemClang>();
if (lldb_ast == nullptr)
return nullptr;
clang::ASTContext &ast = lldb_ast->getASTContext();
@@ -8344,8 +8337,7 @@ bool TypeSystemClang::CompleteTagDeclarationDefinition(
if (qual_type.isNull())
return false;
- auto ts = type.GetTypeSystem();
- auto lldb_ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto lldb_ast = type.GetTypeSystem<TypeSystemClang>();
if (lldb_ast == nullptr)
return false;
@@ -8489,8 +8481,7 @@ TypeSystemClang::CreateMemberPointerType(const CompilerType &type,
const CompilerType &pointee_type) {
if (type && pointee_type.IsValid() &&
type.GetTypeSystem() == pointee_type.GetTypeSystem()) {
- auto ts = type.GetTypeSystem();
- auto ast = ts.dyn_cast_or_null<TypeSystemClang>();
+ auto ast = type.GetTypeSystem<TypeSystemClang>();
if (!ast)
return CompilerType();
return ast->GetType(ast->getASTContext().getMemberPointerType(
@@ -9554,7 +9545,7 @@ void TypeSystemClang::RequireCompleteType(CompilerType type) {
lldbassert(started && "Unable to start a class type definition.");
TypeSystemClang::CompleteTagDeclarationDefinition(type);
const clang::TagDecl *td = ClangUtil::GetAsTagDecl(type);
- auto ts = type.GetTypeSystem().dyn_cast_or_null<TypeSystemClang>();
+ auto ts = type.GetTypeSystem<TypeSystemClang>();
if (ts)
ts->SetDeclIsForcefullyCompleted(td);
}
diff --git a/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp b/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp
index 417708dd2dc22..0f3d2d2ba9d68 100644
--- a/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp
+++ b/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp
@@ -58,9 +58,7 @@ struct MockLanguageRuntime : public LanguageRuntime {
TypeAndOrName &class_type_or_name, Address &address,
Value::ValueType &value_type,
llvm::ArrayRef<uint8_t> &local_buffer) override {
- auto ast = in_value.GetCompilerType()
- .GetTypeSystem()
- .dyn_cast_or_null<TypeSystemClang>();
+ auto ast = in_value.GetCompilerType().GetTypeSystem<TypeSystemClang>();
auto int_type = createRecordWithField(
*ast, "TypeWitInt", ast->GetBasicType(lldb::BasicType::eBasicTypeInt),
|
adrian-prantl
approved these changes
May 21, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That looks like a nice improvement!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add an overloaded
GetTypeSystemto specify the expected type system subclass. Changes code fromGetTypeSystem().dyn_cast_or_null<TypeSystemClang>()toGetTypeSystem<TypeSystemClang>().