Author: Simon Pilgrim Date: 2022-01-29T15:34:26Z New Revision: b81b3ac66886f2c93a2bab52f24ed38e9b5d34a7
URL: https://github.com/llvm/llvm-project/commit/b81b3ac66886f2c93a2bab52f24ed38e9b5d34a7 DIFF: https://github.com/llvm/llvm-project/commit/b81b3ac66886f2c93a2bab52f24ed38e9b5d34a7.diff LOG: [lldb] TypeSystemClang - use castAs/cast<> instead of getAs/dyn_cast<> to avoid dereference of nullptr The pointers are dereferenced immediately, so assert the cast is correct instead of returning nullptr Added: Modified: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp Removed: ################################################################################ diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 51b34669ebadc..418f613e5cc95 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -154,7 +154,7 @@ void addOverridesForMethod(clang::CXXMethodDecl *decl) { [&decls, decl](const clang::CXXBaseSpecifier *specifier, clang::CXXBasePath &path) { if (auto *base_record = llvm::dyn_cast<clang::CXXRecordDecl>( - specifier->getType()->getAs<clang::RecordType>()->getDecl())) { + specifier->getType()->castAs<clang::RecordType>()->getDecl())) { clang::DeclarationName name = decl->getDeclName(); @@ -3175,7 +3175,7 @@ bool TypeSystemClang::IsBlockPointerType( if (qual_type->isBlockPointerType()) { if (function_pointer_type_ptr) { const clang::BlockPointerType *block_pointer_type = - qual_type->getAs<clang::BlockPointerType>(); + qual_type->castAs<clang::BlockPointerType>(); QualType pointee_type = block_pointer_type->getPointeeType(); QualType function_pointer_type = m_ast_up->getPointerType(pointee_type); *function_pointer_type_ptr = @@ -3817,13 +3817,13 @@ TypeSystemClang::GetTypeInfo(lldb::opaque_compiler_type_t type, const clang::Type::TypeClass type_class = qual_type->getTypeClass(); switch (type_class) { case clang::Type::Attributed: - return GetTypeInfo( - qual_type->getAs<clang::AttributedType>() - ->getModifiedType().getAsOpaquePtr(), - pointee_or_element_clang_type); + return GetTypeInfo(qual_type->castAs<clang::AttributedType>() + ->getModifiedType() + .getAsOpaquePtr(), + pointee_or_element_clang_type); case clang::Type::Builtin: { - const clang::BuiltinType *builtin_type = llvm::dyn_cast<clang::BuiltinType>( - qual_type->getCanonicalTypeInternal()); + const clang::BuiltinType *builtin_type = + llvm::cast<clang::BuiltinType>(qual_type->getCanonicalTypeInternal()); uint32_t builtin_type_flags = eTypeIsBuiltIn | eTypeHasValue; switch (builtin_type->getKind()) { @@ -4359,7 +4359,7 @@ TypeSystemClang::GetNumMemberFunctions(lldb::opaque_compiler_type_t type) { case clang::Type::ObjCObjectPointer: { const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAs<clang::ObjCObjectPointerType>(); + qual_type->castAs<clang::ObjCObjectPointerType>(); const clang::ObjCInterfaceType *objc_interface_type = objc_class_type->getInterfaceType(); if (objc_interface_type && @@ -4443,7 +4443,7 @@ TypeSystemClang::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, case clang::Type::ObjCObjectPointer: { const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAs<clang::ObjCObjectPointerType>(); + qual_type->castAs<clang::ObjCObjectPointerType>(); const clang::ObjCInterfaceType *objc_interface_type = objc_class_type->getInterfaceType(); if (objc_interface_type && @@ -5596,7 +5596,7 @@ uint32_t TypeSystemClang::GetNumFields(lldb::opaque_compiler_type_t type) { case clang::Type::ObjCObjectPointer: { const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAs<clang::ObjCObjectPointerType>(); + qual_type->castAs<clang::ObjCObjectPointerType>(); const clang::ObjCInterfaceType *objc_interface_type = objc_class_type->getInterfaceType(); if (objc_interface_type && @@ -5745,7 +5745,7 @@ CompilerType TypeSystemClang::GetFieldAtIndex(lldb::opaque_compiler_type_t type, case clang::Type::ObjCObjectPointer: { const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAs<clang::ObjCObjectPointerType>(); + qual_type->castAs<clang::ObjCObjectPointerType>(); const clang::ObjCInterfaceType *objc_interface_type = objc_class_type->getInterfaceType(); if (objc_interface_type && @@ -5882,7 +5882,7 @@ CompilerType TypeSystemClang::GetDirectBaseClassAtIndex( const clang::CXXRecordDecl *base_class_decl = llvm::cast<clang::CXXRecordDecl>( base_class->getType() - ->getAs<clang::RecordType>() + ->castAs<clang::RecordType>() ->getDecl()); if (base_class->isVirtual()) *bit_offset_ptr = @@ -5977,7 +5977,7 @@ CompilerType TypeSystemClang::GetVirtualBaseClassAtIndex( const clang::CXXRecordDecl *base_class_decl = llvm::cast<clang::CXXRecordDecl>( base_class->getType() - ->getAs<clang::RecordType>() + ->castAs<clang::RecordType>() ->getDecl()); *bit_offset_ptr = record_layout.getVBaseClassOffset(base_class_decl) @@ -6732,7 +6732,7 @@ size_t TypeSystemClang::GetIndexOfChildMemberWithName( child_indexes.push_back(child_idx); parent_record_decl = llvm::cast<clang::RecordDecl>( elem.Base->getType() - ->getAs<clang::RecordType>() + ->castAs<clang::RecordType>() ->getDecl()); } } @@ -6925,7 +6925,7 @@ TypeSystemClang::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, clang::CXXRecordDecl *base_class_decl = llvm::cast<clang::CXXRecordDecl>( base_class->getType() - ->getAs<clang::RecordType>() + ->castAs<clang::RecordType>() ->getDecl()); if (omit_empty_base_classes && !TypeSystemClang::RecordHasFields(base_class_decl)) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits