diff options
18 files changed, 682 insertions, 735 deletions
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index e5dc77504af..e0216cce3e1 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -100,7 +100,7 @@ public: return llvm::dyn_cast<ClangASTContext>(&type_system_or_err.get()); } - clang::ASTContext *getASTContext(); + clang::ASTContext &getASTContext(); clang::MangleContext *getMangleContext(); @@ -117,7 +117,7 @@ public: llvm::IntrusiveRefCntPtr<clang::ExternalASTSource> &ast_source_up); bool GetCompleteDecl(clang::Decl *decl) { - return ClangASTContext::GetCompleteDecl(getASTContext(), decl); + return ClangASTContext::GetCompleteDecl(&getASTContext(), decl); } static void DumpDeclHiearchy(clang::Decl *decl); @@ -134,14 +134,14 @@ public: void SetMetadata(const clang::Decl *object, ClangASTMetadata &meta_data); void SetMetadata(const clang::Type *object, ClangASTMetadata &meta_data); ClangASTMetadata *GetMetadata(const clang::Decl *object) { - return GetMetadata(getASTContext(), object); + return GetMetadata(&getASTContext(), object); } static ClangASTMetadata *GetMetadata(clang::ASTContext *ast, const clang::Decl *object); ClangASTMetadata *GetMetadata(const clang::Type *object) { - return GetMetadata(getASTContext(), object); + return GetMetadata(&getASTContext(), object); } static ClangASTMetadata *GetMetadata(clang::ASTContext *ast, @@ -170,7 +170,7 @@ public: static clang::DeclContext *GetTranslationUnitDecl(clang::ASTContext *ast); clang::DeclContext *GetTranslationUnitDecl() { - return GetTranslationUnitDecl(getASTContext()); + return GetTranslationUnitDecl(&getASTContext()); } static clang::Decl *CopyDecl(clang::ASTContext *dest_context, @@ -193,27 +193,23 @@ public: CompilerType compiler_type; if (type_name.GetLength()) { - clang::ASTContext *ast = getASTContext(); - if (ast) { - if (!decl_context) - decl_context = ast->getTranslationUnitDecl(); - - clang::IdentifierInfo &myIdent = - ast->Idents.get(type_name.GetCString()); - clang::DeclarationName myName = - ast->DeclarationNames.getIdentifier(&myIdent); - - clang::DeclContext::lookup_result result = - decl_context->lookup(myName); - - if (!result.empty()) { - clang::NamedDecl *named_decl = result[0]; - if (const RecordDeclType *record_decl = - llvm::dyn_cast<RecordDeclType>(named_decl)) - compiler_type.SetCompilerType( - this, clang::QualType(record_decl->getTypeForDecl(), 0) - .getAsOpaquePtr()); - } + clang::ASTContext &ast = getASTContext(); + if (!decl_context) + decl_context = ast.getTranslationUnitDecl(); + + clang::IdentifierInfo &myIdent = ast.Idents.get(type_name.GetCString()); + clang::DeclarationName myName = + ast.DeclarationNames.getIdentifier(&myIdent); + + clang::DeclContext::lookup_result result = decl_context->lookup(myName); + + if (!result.empty()) { + clang::NamedDecl *named_decl = result[0]; + if (const RecordDeclType *record_decl = + llvm::dyn_cast<RecordDeclType>(named_decl)) + compiler_type.SetCompilerType( + this, clang::QualType(record_decl->getTypeForDecl(), 0) + .getAsOpaquePtr()); } } @@ -355,14 +351,14 @@ public: const CompilerType *args, unsigned num_args, bool is_variadic, unsigned type_quals) { return ClangASTContext::CreateFunctionType( - getASTContext(), result_type, args, num_args, is_variadic, type_quals); + &getASTContext(), result_type, args, num_args, is_variadic, type_quals); } CompilerType CreateFunctionType(const CompilerType &result_type, const CompilerType *args, unsigned num_args, bool is_variadic, unsigned type_quals, clang::CallingConv cc) { - return ClangASTContext::CreateFunctionType(getASTContext(), result_type, + return ClangASTContext::CreateFunctionType(&getASTContext(), result_type, args, num_args, is_variadic, type_quals, cc); } @@ -396,7 +392,7 @@ public: size_t bit_size, bool is_signed); CompilerType GetPointerSizedIntType(bool is_signed) { - return GetPointerSizedIntType(getASTContext(), is_signed); + return GetPointerSizedIntType(&getASTContext(), is_signed); } static CompilerType GetPointerSizedIntType(clang::ASTContext *ast, diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp index 6d6830c740d..1caac9e11cb 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp @@ -453,7 +453,7 @@ void ASTResultSynthesizer::CommitPersistentDecls() { ConstString name_cs(name.str().c_str()); Decl *D_scratch = m_target.GetClangASTImporter()->DeportDecl( - ClangASTContext::GetScratch(m_target)->getASTContext(), decl); + &ClangASTContext::GetScratch(m_target)->getASTContext(), decl); if (!D_scratch) { Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp index e044a4d33b4..ff86f9f818b 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp @@ -57,7 +57,7 @@ ClangASTSource::ClangASTSource(const lldb::TargetSP &target, } void ClangASTSource::InstallASTContext(ClangASTContext &clang_ast_context) { - m_ast_context = clang_ast_context.getASTContext(); + m_ast_context = &clang_ast_context.getASTContext(); m_clang_ast_context = &clang_ast_context; m_file_manager = &m_ast_context->getSourceManager().getFileManager(); m_ast_importer_sp->InstallMapCompleter(m_ast_context, *this); @@ -80,14 +80,11 @@ ClangASTSource::~ClangASTSource() { if (!scratch_clang_ast_context) return; - clang::ASTContext *scratch_ast_context = + clang::ASTContext &scratch_ast_context = scratch_clang_ast_context->getASTContext(); - if (!scratch_ast_context) - return; - - if (m_ast_context != scratch_ast_context && m_ast_importer_sp) - m_ast_importer_sp->ForgetSource(scratch_ast_context, m_ast_context); + if (m_ast_context != &scratch_ast_context && m_ast_importer_sp) + m_ast_importer_sp->ForgetSource(&scratch_ast_context, m_ast_context); } void ClangASTSource::StartTranslationUnit(ASTConsumer *Consumer) { @@ -1880,10 +1877,10 @@ clang::NamedDecl *NameSearchContext::AddVarDecl(const CompilerType &type) { IdentifierInfo *ii = m_decl_name.getAsIdentifierInfo(); - clang::ASTContext *ast = lldb_ast->getASTContext(); + clang::ASTContext &ast = lldb_ast->getASTContext(); clang::NamedDecl *Decl = VarDecl::Create( - *ast, const_cast<DeclContext *>(m_decl_context), SourceLocation(), + ast, const_cast<DeclContext *>(m_decl_context), SourceLocation(), SourceLocation(), ii, ClangUtil::GetQualType(type), nullptr, SC_Static); m_decls.push_back(Decl); @@ -1909,7 +1906,7 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type, QualType qual_type(ClangUtil::GetQualType(type)); - clang::ASTContext *ast = lldb_ast->getASTContext(); + clang::ASTContext &ast = lldb_ast->getASTContext(); const bool isInlineSpecified = false; const bool hasWrittenPrototype = true; @@ -1919,7 +1916,7 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type, if (extern_c) { context = LinkageSpecDecl::Create( - *ast, context, SourceLocation(), SourceLocation(), + ast, context, SourceLocation(), SourceLocation(), clang::LinkageSpecDecl::LanguageIDs::lang_c, false); } @@ -1931,7 +1928,7 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type, : m_decl_name; clang::FunctionDecl *func_decl = FunctionDecl::Create( - *ast, context, SourceLocation(), SourceLocation(), decl_name, qual_type, + ast, context, SourceLocation(), SourceLocation(), decl_name, qual_type, nullptr, SC_Extern, isInlineSpecified, hasWrittenPrototype, isConstexprSpecified ? CSK_constexpr : CSK_unspecified); @@ -1952,7 +1949,7 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type, QualType arg_qual_type(func_proto_type->getParamType(ArgIndex)); parm_var_decls.push_back( - ParmVarDecl::Create(*ast, const_cast<DeclContext *>(context), + ParmVarDecl::Create(ast, const_cast<DeclContext *>(context), SourceLocation(), SourceLocation(), nullptr, arg_qual_type, nullptr, SC_Static, nullptr)); } diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 23202766892..e9ba1bffd34 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -179,7 +179,7 @@ TypeFromUser ClangExpressionDeclMap::DeportType(ClangASTContext &target, TypeFromParser parser_type) { assert(&target == ClangASTContext::GetScratch(*m_target)); assert((TypeSystem *)&source == parser_type.GetTypeSystem()); - assert(source.getASTContext() == m_ast_context); + assert(&source.getASTContext() == m_ast_context); if (m_ast_importer_sp) { return TypeFromUser(m_ast_importer_sp->DeportType(target, parser_type)); @@ -741,16 +741,7 @@ clang::NamedDecl *ClangExpressionDeclMap::GetPersistentDecl(ConstString name) { if (!target) return nullptr; - ClangASTContext *scratch_clang_ast_context = - ClangASTContext::GetScratch(*target); - - if (!scratch_clang_ast_context) - return nullptr; - - ASTContext *scratch_ast_context = scratch_clang_ast_context->getASTContext(); - - if (!scratch_ast_context) - return nullptr; + ClangASTContext::GetScratch(*target); return m_parser_vars->m_persistent_vars->GetPersistentDecl(name); } @@ -1528,15 +1519,6 @@ bool ClangExpressionDeclMap::GetVariableValue(VariableSP &var, return false; } - ASTContext *ast = clang_ast->getASTContext(); - - if (!ast) { - if (log) - log->PutCString( - "There is no AST context for the current execution context"); - return false; - } - DWARFExpression &var_location_expr = var->LocationExpression(); Target *target = m_parser_vars->m_exe_ctx.GetTargetPtr(); diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 3498c9dd23c..64461fc2bc0 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -466,7 +466,7 @@ lldb_private::formatters::NSArrayMSyntheticFrontEndBase::NSArrayMSyntheticFrontE if (clang_ast_context) m_id_type = CompilerType( clang_ast_context, - clang_ast_context->getASTContext()->ObjCBuiltinIdTy.getAsOpaquePtr()); + clang_ast_context->getASTContext().ObjCBuiltinIdTy.getAsOpaquePtr()); if (valobj_sp->GetProcessSP()) m_ptr_size = valobj_sp->GetProcessSP()->GetAddressByteSize(); } @@ -614,7 +614,7 @@ lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>:: if (clang_ast_context) m_id_type = CompilerType(clang_ast_context, clang_ast_context->getASTContext() - ->ObjCBuiltinIdTy.getAsOpaquePtr()); + .ObjCBuiltinIdTy.getAsOpaquePtr()); } } } diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp index 6acd6a6df6b..aca0b8fddcc 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp @@ -132,7 +132,7 @@ public: void StartTranslationUnit(clang::ASTConsumer *Consumer) override { clang::TranslationUnitDecl *translation_unit_decl = - m_decl_vendor.m_ast_ctx.getASTContext()->getTranslationUnitDecl(); + m_decl_vendor.m_ast_ctx.getASTContext().getTranslationUnitDecl(); translation_unit_decl->setHasExternalVisibleStorage(); translation_unit_decl->setHasExternalLexicalStorage(); } @@ -153,7 +153,7 @@ AppleObjCDeclVendor::AppleObjCDeclVendor(ObjCLanguageRuntime &runtime) m_external_source = new AppleObjCExternalASTSource(*this); llvm::IntrusiveRefCntPtr<clang::ExternalASTSource> external_source_owning_ptr( m_external_source); - m_ast_ctx.getASTContext()->setExternalSource(external_source_owning_ptr); + m_ast_ctx.getASTContext().setExternalSource(external_source_owning_ptr); } clang::ObjCInterfaceDecl * @@ -163,7 +163,7 @@ AppleObjCDeclVendor::GetDeclForISA(ObjCLanguageRuntime::ObjCISA isa) { if (iter != m_isa_to_interface.end()) return iter->second; - clang::ASTContext *ast_ctx = m_ast_ctx.getASTContext(); + clang::ASTContext &ast_ctx = m_ast_ctx.getASTContext(); ObjCLanguageRuntime::ClassDescriptorSP descriptor = m_runtime.GetClassDescriptorFromISA(isa); @@ -174,10 +174,10 @@ AppleObjCDeclVendor::GetDeclForISA(ObjCLanguageRuntime::ObjCISA isa) { ConstString name(descriptor->GetClassName()); clang::IdentifierInfo &identifier_info = - ast_ctx->Idents.get(name.GetStringRef()); + ast_ctx.Idents.get(name.GetStringRef()); clang::ObjCInterfaceDecl *new_iface_decl = clang::ObjCInterfaceDecl::Create( - *ast_ctx, ast_ctx->getTranslationUnitDecl(), clang::SourceLocation(), + ast_ctx, ast_ctx.getTranslationUnitDecl(), clang::SourceLocation(), &identifier_info, nullptr, nullptr); ClangASTMetadata meta_data; @@ -187,7 +187,7 @@ AppleObjCDeclVendor::GetDeclForISA(ObjCLanguageRuntime::ObjCISA isa) { new_iface_decl->setHasExternalVisibleStorage(); new_iface_decl->setHasExternalLexicalStorage(); - ast_ctx->getTranslationUnitDecl()->addDecl(new_iface_decl); + ast_ctx.getTranslationUnitDecl()->addDecl(new_iface_decl); m_isa_to_interface[isa] = new_iface_decl; @@ -443,9 +443,9 @@ bool AppleObjCDeclVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) { return; FinishDecl(superclass_decl); - clang::ASTContext *context = m_ast_ctx.getASTContext(); - interface_decl->setSuperClass(context->getTrivialTypeSourceInfo( - context->getObjCInterfaceType(superclass_decl))); + clang::ASTContext &context = m_ast_ctx.getASTContext(); + interface_decl->setSuperClass(context.getTrivialTypeSourceInfo( + context.getObjCInterfaceType(superclass_decl))); }; auto instance_method_func = @@ -503,8 +503,8 @@ bool AppleObjCDeclVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) { clang::TypeSourceInfo *const type_source_info = nullptr; const bool is_synthesized = false; clang::ObjCIvarDecl *ivar_decl = clang::ObjCIvarDecl::Create( - *m_ast_ctx.getASTContext(), interface_decl, clang::SourceLocation(), - clang::SourceLocation(), &m_ast_ctx.getASTContext()->Idents.get(name), + m_ast_ctx.getASTContext(), interface_decl, clang::SourceLocation(), + clang::SourceLocation(), &m_ast_ctx.getASTContext().Idents.get(name), ClangUtil::GetQualType(ivar_type), type_source_info, // TypeSourceInfo * clang::ObjCIvarDecl::Public, nullptr, is_synthesized); @@ -559,22 +559,22 @@ AppleObjCDeclVendor::FindDecls(ConstString name, bool append, do { // See if the type is already in our ASTContext. - clang::ASTContext *ast_ctx = m_ast_ctx.getASTContext(); + clang::ASTContext &ast_ctx = m_ast_ctx.getASTContext(); clang::IdentifierInfo &identifier_info = - ast_ctx->Idents.get(name.GetStringRef()); + ast_ctx.Idents.get(name.GetStringRef()); clang::DeclarationName decl_name = - ast_ctx->DeclarationNames.getIdentifier(&identifier_info); + ast_ctx.DeclarationNames.getIdentifier(&identifier_info); clang::DeclContext::lookup_result lookup_result = - ast_ctx->getTranslationUnitDecl()->lookup(decl_name); + ast_ctx.getTranslationUnitDecl()->lookup(decl_name); if (!lookup_result.empty()) { if (clang::ObjCInterfaceDecl *result_iface_decl = llvm::dyn_cast<clang::ObjCInterfaceDecl>(lookup_result[0])) { if (log) { clang::QualType result_iface_type = - ast_ctx->getObjCInterfaceType(result_iface_decl); + ast_ctx.getObjCInterfaceType(result_iface_decl); uint64_t isa_value = LLDB_INVALID_ADDRESS; ClangASTMetadata *metadata = @@ -625,8 +625,7 @@ AppleObjCDeclVendor::FindDecls(ConstString name, bool append, } if (log) { - clang::QualType new_iface_type = - ast_ctx->getObjCInterfaceType(iface_decl); + clang::QualType new_iface_type = ast_ctx.getObjCInterfaceType(iface_decl); LLDB_LOG(log, "AOCTV::FT [{0}] Created {1} (isa 0x{2:x})", current_id, new_iface_type.getAsString(), (uint64_t)isa); diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp index 87ae4c2c6c4..399bb120d7a 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp @@ -315,10 +315,8 @@ ObjCLanguageRuntime::EncodingToType::RealizeType(const char *name, CompilerType ObjCLanguageRuntime::EncodingToType::RealizeType( ClangASTContext &ast_ctx, const char *name, bool for_expression) { - clang::ASTContext *clang_ast = ast_ctx.getASTContext(); - if (!clang_ast) - return CompilerType(); - return RealizeType(*clang_ast, name, for_expression); + clang::ASTContext &clang_ast = ast_ctx.getASTContext(); + return RealizeType(clang_ast, name, for_expression); } ObjCLanguageRuntime::EncodingToType::~EncodingToType() {} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 136027ee4d5..5a6ce7f926b 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -1909,7 +1909,7 @@ bool DWARFASTParserClang::ParseTemplateDIE( } } - clang::ASTContext *ast = m_ast.getASTContext(); + clang::ASTContext &ast = m_ast.getASTContext(); if (!clang_type) clang_type = m_ast.GetBasicType(eBasicTypeVoid); @@ -1929,7 +1929,7 @@ bool DWARFASTParserClang::ParseTemplateDIE( return false; llvm::APInt apint(*size, uval64, is_signed); template_param_infos.args.push_back( - clang::TemplateArgument(*ast, llvm::APSInt(apint, !is_signed), + clang::TemplateArgument(ast, llvm::APSInt(apint, !is_signed), ClangUtil::GetQualType(clang_type))); } else { template_param_infos.args.push_back( @@ -3570,18 +3570,20 @@ DWARFASTParserClang::ResolveNamespaceDIE(const DWARFDIE &die) { SymbolFileDWARF *dwarf = die.GetDWARF(); if (namespace_name) { dwarf->GetObjectFile()->GetModule()->LogMessage( - log, "ASTContext => %p: 0x%8.8" PRIx64 - ": DW_TAG_namespace with DW_AT_name(\"%s\") => " - "clang::NamespaceDecl *%p (original = %p)", - static_cast<void *>(m_ast.getASTContext()), die.GetID(), + log, + "ASTContext => %p: 0x%8.8" PRIx64 + ": DW_TAG_namespace with DW_AT_name(\"%s\") => " + "clang::NamespaceDecl *%p (original = %p)", + static_cast<void *>(&m_ast.getASTContext()), die.GetID(), namespace_name, static_cast<void *>(namespace_decl), static_cast<void *>(namespace_decl->getOriginalNamespace())); } else { dwarf->GetObjectFile()->GetModule()->LogMessage( - log, "ASTContext => %p: 0x%8.8" PRIx64 - ": DW_TAG_namespace (anonymous) => clang::NamespaceDecl *%p " - "(original = %p)", - static_cast<void *>(m_ast.getASTContext()), die.GetID(), + log, + "ASTContext => %p: 0x%8.8" PRIx64 + ": DW_TAG_namespace (anonymous) => clang::NamespaceDecl *%p " + "(original = %p)", + static_cast<void *>(&m_ast.getASTContext()), die.GetID(), static_cast<void *>(namespace_decl), static_cast<void *>(namespace_decl->getOriginalNamespace())); } diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp index b58550beb04..2b70f4602b8 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -655,7 +655,7 @@ bool PdbAstBuilder::CompleteTagDecl(clang::TagDecl &tag) { lldbassert(IsTagRecord(type_id, m_index.tpi())); - clang::QualType tag_qt = m_clang.getASTContext()->getTypeDeclType(&tag); + clang::QualType tag_qt = m_clang.getASTContext().getTypeDeclType(&tag); ClangASTContext::SetHasExternalStorage(tag_qt.getAsOpaquePtr(), false); TypeIndex tag_ti = type_id.index; @@ -700,7 +700,7 @@ clang::QualType PdbAstBuilder::CreateSimpleType(TypeIndex ti) { if (ti.getSimpleMode() != SimpleTypeMode::Direct) { clang::QualType direct_type = GetOrCreateType(ti.makeDirect()); - return m_clang.getASTContext()->getPointerType(direct_type); + return m_clang.getASTContext().getPointerType(direct_type); } if (ti.getSimpleKind() == SimpleTypeKind::NotTranslated) @@ -725,19 +725,17 @@ clang::QualType PdbAstBuilder::CreatePointerType(const PointerRecord &pointer) { MemberPointerInfo mpi = pointer.getMemberInfo(); clang::QualType class_type = GetOrCreateType(mpi.ContainingType); - return m_clang.getASTContext()->getMemberPointerType( + return m_clang.getASTContext().getMemberPointerType( pointee_type, class_type.getTypePtr()); } clang::QualType pointer_type; if (pointer.getMode() == PointerMode::LValueReference) - pointer_type = - m_clang.getASTContext()->getLValueReferenceType(pointee_type); + pointer_type = m_clang.getASTContext().getLValueReferenceType(pointee_type); else if (pointer.getMode() == PointerMode::RValueReference) - pointer_type = - m_clang.getASTContext()->getRValueReferenceType(pointee_type); + pointer_type = m_clang.getASTContext().getRValueReferenceType(pointee_type); else - pointer_type = m_clang.getASTContext()->getPointerType(pointee_type); + pointer_type = m_clang.getASTContext().getPointerType(pointee_type); if ((pointer.getOptions() & PointerOptions::Const) != PointerOptions::None) pointer_type.addConst(); diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp index 740b3901686..bbbd3415158 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp @@ -103,9 +103,7 @@ static CompilerType GetBuiltinTypeForPDBEncodingAndBitSize(ClangASTContext &clang_ast, const PDBSymbolTypeBuiltin &pdb_type, Encoding encoding, uint32_t width) { - auto *ast = clang_ast.getASTContext(); - if (!ast) - return CompilerType(); + clang::ASTContext &ast = clang_ast.getASTContext(); switch (pdb_type.getBuiltinType()) { default: @@ -119,32 +117,32 @@ GetBuiltinTypeForPDBEncodingAndBitSize(ClangASTContext &clang_ast, case PDB_BuiltinType::Bool: return clang_ast.GetBasicType(eBasicTypeBool); case PDB_BuiltinType::Long: - if (width == ast->getTypeSize(ast->LongTy)) - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->LongTy.getAsOpaquePtr()); - if (width == ast->getTypeSize(ast->LongLongTy)) - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->LongLongTy.getAsOpaquePtr()); + if (width == ast.getTypeSize(ast.LongTy)) + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.LongTy.getAsOpaquePtr()); + if (width == ast.getTypeSize(ast.LongLongTy)) + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.LongLongTy.getAsOpaquePtr()); break; case PDB_BuiltinType::ULong: - if (width == ast->getTypeSize(ast->UnsignedLongTy)) - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->UnsignedLongTy.getAsOpaquePtr()); - if (width == ast->getTypeSize(ast->UnsignedLongLongTy)) - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->UnsignedLongLongTy.getAsOpaquePtr()); + if (width == ast.getTypeSize(ast.UnsignedLongTy)) + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.UnsignedLongTy.getAsOpaquePtr()); + if (width == ast.getTypeSize(ast.UnsignedLongLongTy)) + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.UnsignedLongLongTy.getAsOpaquePtr()); break; case PDB_BuiltinType::WCharT: - if (width == ast->getTypeSize(ast->WCharTy)) - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->WCharTy.getAsOpaquePtr()); + if (width == ast.getTypeSize(ast.WCharTy)) + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.WCharTy.getAsOpaquePtr()); break; case PDB_BuiltinType::Char16: - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->Char16Ty.getAsOpaquePtr()); + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.Char16Ty.getAsOpaquePtr()); case PDB_BuiltinType::Char32: - return CompilerType(ClangASTContext::GetASTContext(ast), - ast->Char32Ty.getAsOpaquePtr()); + return CompilerType(ClangASTContext::GetASTContext(&ast), + ast.Char32Ty.getAsOpaquePtr()); case PDB_BuiltinType::Float: // Note: types `long double` and `double` have same bit size in MSVC and // there is no information in the PDB to distinguish them. So when falling @@ -428,7 +426,7 @@ lldb::TypeSP PDBASTParser::CreateLLDBTypeFromPDBType(const PDBSymbol &type) { m_uid_to_decl[type.getSymIndexId()] = record_decl; auto inheritance_attr = clang::MSInheritanceAttr::CreateImplicit( - *m_ast.getASTContext(), GetMSInheritance(*udt)); + m_ast.getASTContext(), GetMSInheritance(*udt)); record_decl->addAttr(inheritance_attr); ClangASTContext::StartTagDeclarationDefinition(clang_type); @@ -900,7 +898,7 @@ PDBASTParser::GetDeclForSymbol(const llvm::pdb::PDBSymbol &symbol) { // Check if the current context already contains the symbol with the name. clang::Decl *decl = - GetDeclFromContextByName(*m_ast.getASTContext(), *decl_context, name); + GetDeclFromContextByName(m_ast.getASTContext(), *decl_context, name); if (!decl) { auto type = symbol_file->ResolveTypeUID(data->getTypeId()); if (!type) @@ -1160,7 +1158,7 @@ bool PDBASTParser::AddEnumValue(CompilerType enum_type, } CompilerType underlying_type = m_ast.GetEnumerationIntegerType(enum_type.GetOpaqueQualType()); - uint32_t byte_size = m_ast.getASTContext()->getTypeSize( + uint32_t byte_size = m_ast.getASTContext().getTypeSize( ClangUtil::GetQualType(underlying_type)); auto enum_constant_decl = m_ast.AddEnumerationValueToEnumerationType( enum_type, decl, name.c_str(), raw_value, byte_size * 8); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp index 08e3737865a..69a4470c258 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp @@ -413,8 +413,7 @@ void SystemRuntimeMacOSX::ReadLibdispatchTSDIndexes() { ClangASTContext *ast_ctx = ClangASTContext::GetScratch(m_process->GetTarget()); - if (ast_ctx->getASTContext() && - m_dispatch_tsd_indexes_addr != LLDB_INVALID_ADDRESS) { + if (m_dispatch_tsd_indexes_addr != LLDB_INVALID_ADDRESS) { CompilerType uint16 = ast_ctx->GetBuiltinTypeForEncodingAndBitSize(eEncodingUint, 16); CompilerType dispatch_tsd_indexes_s = ast_ctx->CreateRecordType( diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index 65b95089b93..66a682c3493 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -649,16 +649,14 @@ void ClangASTContext::SetTargetTriple(llvm::StringRef target_triple) { void ClangASTContext::SetExternalSource( llvm::IntrusiveRefCntPtr<ExternalASTSource> &ast_source_up) { - ASTContext *ast = getASTContext(); - if (ast) { - ast->setExternalSource(ast_source_up); - ast->getTranslationUnitDecl()->setHasExternalLexicalStorage(true); - } + ASTContext &ast = getASTContext(); + ast.setExternalSource(ast_source_up); + ast.getTranslationUnitDecl()->setHasExternalLexicalStorage(true); } -ASTContext *ClangASTContext::getASTContext() { +ASTContext &ClangASTContext::getASTContext() { assert(m_ast_up); - return m_ast_up.get(); + return *m_ast_up; } class NullDiagnosticConsumer : public DiagnosticConsumer { @@ -745,7 +743,7 @@ ClangASTContext *ClangASTContext::GetASTContext(clang::ASTContext *ast) { clang::MangleContext *ClangASTContext::getMangleContext() { if (m_mangle_ctx_up == nullptr) - m_mangle_ctx_up.reset(getASTContext()->createMangleContext()); + m_mangle_ctx_up.reset(getASTContext().createMangleContext()); return m_mangle_ctx_up.get(); } @@ -762,77 +760,75 @@ TargetInfo *ClangASTContext::getTargetInfo() { // target_triple should be something like "x86_64-apple-macosx" if (m_target_info_up == nullptr && !m_target_triple.empty()) m_target_info_up.reset(TargetInfo::CreateTargetInfo( - getASTContext()->getDiagnostics(), getTargetOptions())); + getASTContext().getDiagnostics(), getTargetOptions())); return m_target_info_up.get(); } #pragma mark Basic Types static inline bool QualTypeMatchesBitSize(const uint64_t bit_size, - ASTContext *ast, QualType qual_type) { - uint64_t qual_type_bit_size = ast->getTypeSize(qual_type); + ASTContext &ast, QualType qual_type) { + uint64_t qual_type_bit_size = ast.getTypeSize(qual_type); return qual_type_bit_size == bit_size; } CompilerType ClangASTContext::GetBuiltinTypeForEncodingAndBitSize(Encoding encoding, size_t bit_size) { - ASTContext *ast = this->getASTContext(); - if (!ast) - return CompilerType(); + ASTContext &ast = getASTContext(); switch (encoding) { case eEncodingInvalid: - if (QualTypeMatchesBitSize(bit_size, ast, ast->VoidPtrTy)) - return CompilerType(this, ast->VoidPtrTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.VoidPtrTy)) + return CompilerType(this, ast.VoidPtrTy.getAsOpaquePtr()); break; case eEncodingUint: - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedCharTy)) - return CompilerType(this, ast->UnsignedCharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedShortTy)) - return CompilerType(this, ast->UnsignedShortTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedIntTy)) - return CompilerType(this, ast->UnsignedIntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongTy)) - return CompilerType(this, ast->UnsignedLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongLongTy)) - return CompilerType(this, ast->UnsignedLongLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedInt128Ty)) - return CompilerType(this, ast->UnsignedInt128Ty.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) + return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) + return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) + return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) + return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) + return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) + return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); break; case eEncodingSint: - if (QualTypeMatchesBitSize(bit_size, ast, ast->SignedCharTy)) - return CompilerType(this, ast->SignedCharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->ShortTy)) - return CompilerType(this, ast->ShortTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->IntTy)) - return CompilerType(this, ast->IntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongTy)) - return CompilerType(this, ast->LongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongLongTy)) - return CompilerType(this, ast->LongLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->Int128Ty)) - return CompilerType(this, ast->Int128Ty.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) + return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) + return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) + return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) + return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) + return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) + return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); break; case eEncodingIEEE754: - if (QualTypeMatchesBitSize(bit_size, ast, ast->FloatTy)) - return CompilerType(this, ast->FloatTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->DoubleTy)) - return CompilerType(this, ast->DoubleTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongDoubleTy)) - return CompilerType(this, ast->LongDoubleTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->HalfTy)) - return CompilerType(this, ast->HalfTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) + return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) + return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) + return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.HalfTy)) + return CompilerType(this, ast.HalfTy.getAsOpaquePtr()); break; case eEncodingVector: // Sanity check that bit_size is a multiple of 8's. if (bit_size && !(bit_size & 0x7u)) - return CompilerType( - this, ast->getExtVectorType(ast->UnsignedCharTy, bit_size / 8) - .getAsOpaquePtr()); + return CompilerType(this, + ast.getExtVectorType(ast.UnsignedCharTy, bit_size / 8) + .getAsOpaquePtr()); break; } @@ -915,223 +911,221 @@ uint32_t ClangASTContext::GetPointerByteSize() { } CompilerType ClangASTContext::GetBasicType(lldb::BasicType basic_type) { - clang::ASTContext *ast = getASTContext(); + clang::ASTContext &ast = getASTContext(); lldb::opaque_compiler_type_t clang_type = - GetOpaqueCompilerType(ast, basic_type); + GetOpaqueCompilerType(&ast, basic_type); if (clang_type) - return CompilerType(GetASTContext(ast), clang_type); + return CompilerType(GetASTContext(&ast), clang_type); return CompilerType(); } CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( const char *type_name, uint32_t dw_ate, uint32_t bit_size) { - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); #define streq(a, b) strcmp(a, b) == 0 - assert(ast != nullptr); - if (ast) { - switch (dw_ate) { - default: - break; - case DW_ATE_address: - if (QualTypeMatchesBitSize(bit_size, ast, ast->VoidPtrTy)) - return CompilerType(this, ast->VoidPtrTy.getAsOpaquePtr()); - break; + switch (dw_ate) { + default: + break; - case DW_ATE_boolean: - if (QualTypeMatchesBitSize(bit_size, ast, ast->BoolTy)) - return CompilerType(this, ast->BoolTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedCharTy)) - return CompilerType(this, ast->UnsignedCharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedShortTy)) - return CompilerType(this, ast->UnsignedShortTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedIntTy)) - return CompilerType(this, ast->UnsignedIntTy.getAsOpaquePtr()); - break; + case DW_ATE_address: + if (QualTypeMatchesBitSize(bit_size, ast, ast.VoidPtrTy)) + return CompilerType(this, ast.VoidPtrTy.getAsOpaquePtr()); + break; - case DW_ATE_lo_user: - // This has been seen to mean DW_AT_complex_integer - if (type_name) { - if (::strstr(type_name, "complex")) { - CompilerType complex_int_clang_type = - GetBuiltinTypeForDWARFEncodingAndBitSize("int", DW_ATE_signed, - bit_size / 2); - return CompilerType( - this, ast->getComplexType( - ClangUtil::GetQualType(complex_int_clang_type)) - .getAsOpaquePtr()); - } - } - break; + case DW_ATE_boolean: + if (QualTypeMatchesBitSize(bit_size, ast, ast.BoolTy)) + return CompilerType(this, ast.BoolTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) + return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) + return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) + return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + break; - case DW_ATE_complex_float: - if (QualTypeMatchesBitSize(bit_size, ast, ast->FloatComplexTy)) - return CompilerType(this, ast->FloatComplexTy.getAsOpaquePtr()); - else if (QualTypeMatchesBitSize(bit_size, ast, ast->DoubleComplexTy)) - return CompilerType(this, ast->DoubleComplexTy.getAsOpaquePtr()); - else if (QualTypeMatchesBitSize(bit_size, ast, ast->LongDoubleComplexTy)) - return CompilerType(this, ast->LongDoubleComplexTy.getAsOpaquePtr()); - else { - CompilerType complex_float_clang_type = - GetBuiltinTypeForDWARFEncodingAndBitSize("float", DW_ATE_float, + case DW_ATE_lo_user: + // This has been seen to mean DW_AT_complex_integer + if (type_name) { + if (::strstr(type_name, "complex")) { + CompilerType complex_int_clang_type = + GetBuiltinTypeForDWARFEncodingAndBitSize("int", DW_ATE_signed, bit_size / 2); return CompilerType( - this, ast->getComplexType( - ClangUtil::GetQualType(complex_float_clang_type)) - .getAsOpaquePtr()); + this, + ast.getComplexType(ClangUtil::GetQualType(complex_int_clang_type)) + .getAsOpaquePtr()); } - break; + } + break; - case DW_ATE_float: - if (streq(type_name, "float") && - QualTypeMatchesBitSize(bit_size, ast, ast->FloatTy)) - return CompilerType(this, ast->FloatTy.getAsOpaquePtr()); - if (streq(type_name, "double") && - QualTypeMatchesBitSize(bit_size, ast, ast->DoubleTy)) - return CompilerType(this, ast->DoubleTy.getAsOpaquePtr()); - if (streq(type_name, "long double") && - QualTypeMatchesBitSize(bit_size, ast, ast->LongDoubleTy)) - return CompilerType(this, ast->LongDoubleTy.getAsOpaquePtr()); - // Fall back to not requiring a name match - if (QualTypeMatchesBitSize(bit_size, ast, ast->FloatTy)) - return CompilerType(this, ast->FloatTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->DoubleTy)) - return CompilerType(this, ast->DoubleTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongDoubleTy)) - return CompilerType(this, ast->LongDoubleTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->HalfTy)) - return CompilerType(this, ast->HalfTy.getAsOpaquePtr()); - break; + case DW_ATE_complex_float: + if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatComplexTy)) + return CompilerType(this, ast.FloatComplexTy.getAsOpaquePtr()); + else if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleComplexTy)) + return CompilerType(this, ast.DoubleComplexTy.getAsOpaquePtr()); + else if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleComplexTy)) + return CompilerType(this, ast.LongDoubleComplexTy.getAsOpaquePtr()); + else { + CompilerType complex_float_clang_type = + GetBuiltinTypeForDWARFEncodingAndBitSize("float", DW_ATE_float, + bit_size / 2); + return CompilerType( + this, + ast.getComplexType(ClangUtil::GetQualType(complex_float_clang_type)) + .getAsOpaquePtr()); + } + break; - case DW_ATE_signed: - if (type_name) { - if (streq(type_name, "wchar_t") && - QualTypeMatchesBitSize(bit_size, ast, ast->WCharTy) && - (getTargetInfo() && - TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) - return CompilerType(this, ast->WCharTy.getAsOpaquePtr()); - if (streq(type_name, "void") && - QualTypeMatchesBitSize(bit_size, ast, ast->VoidTy)) - return CompilerType(this, ast->VoidTy.getAsOpaquePtr()); - if (strstr(type_name, "long long") && - QualTypeMatchesBitSize(bit_size, ast, ast->LongLongTy)) - return CompilerType(this, ast->LongLongTy.getAsOpaquePtr()); - if (strstr(type_name, "long") && - QualTypeMatchesBitSize(bit_size, ast, ast->LongTy)) - return CompilerType(this, ast->LongTy.getAsOpaquePtr()); - if (strstr(type_name, "short") && - QualTypeMatchesBitSize(bit_size, ast, ast->ShortTy)) - return CompilerType(this, ast->ShortTy.getAsOpaquePtr()); - if (strstr(type_name, "char")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->CharTy)) - return CompilerType(this, ast->CharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->SignedCharTy)) - return CompilerType(this, ast->SignedCharTy.getAsOpaquePtr()); - } - if (strstr(type_name, "int")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->IntTy)) - return CompilerType(this, ast->IntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->Int128Ty)) - return CompilerType(this, ast->Int128Ty.getAsOpaquePtr()); - } - } - // We weren't able to match up a type name, just search by size - if (QualTypeMatchesBitSize(bit_size, ast, ast->CharTy)) - return CompilerType(this, ast->CharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->ShortTy)) - return CompilerType(this, ast->ShortTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->IntTy)) - return CompilerType(this, ast->IntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongTy)) - return CompilerType(this, ast->LongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->LongLongTy)) - return CompilerType(this, ast->LongLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->Int128Ty)) - return CompilerType(this, ast->Int128Ty.getAsOpaquePtr()); - break; + case DW_ATE_float: + if (streq(type_name, "float") && + QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) + return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + if (streq(type_name, "double") && + QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) + return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + if (streq(type_name, "long double") && + QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) + return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + // Fall back to not requiring a name match + if (QualTypeMatchesBitSize(bit_size, ast, ast.FloatTy)) + return CompilerType(this, ast.FloatTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.DoubleTy)) + return CompilerType(this, ast.DoubleTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongDoubleTy)) + return CompilerType(this, ast.LongDoubleTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.HalfTy)) + return CompilerType(this, ast.HalfTy.getAsOpaquePtr()); + break; - case DW_ATE_signed_char: - if (ast->getLangOpts().CharIsSigned && type_name && - streq(type_name, "char")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->CharTy)) - return CompilerType(this, ast->CharTy.getAsOpaquePtr()); + case DW_ATE_signed: + if (type_name) { + if (streq(type_name, "wchar_t") && + QualTypeMatchesBitSize(bit_size, ast, ast.WCharTy) && + (getTargetInfo() && + TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) + return CompilerType(this, ast.WCharTy.getAsOpaquePtr()); + if (streq(type_name, "void") && + QualTypeMatchesBitSize(bit_size, ast, ast.VoidTy)) + return CompilerType(this, ast.VoidTy.getAsOpaquePtr()); + if (strstr(type_name, "long long") && + QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) + return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + if (strstr(type_name, "long") && + QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) + return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + if (strstr(type_name, "short") && + QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) + return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + if (strstr(type_name, "char")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) + return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) + return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); } - if (QualTypeMatchesBitSize(bit_size, ast, ast->SignedCharTy)) - return CompilerType(this, ast->SignedCharTy.getAsOpaquePtr()); - break; + if (strstr(type_name, "int")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) + return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) + return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + } + } + // We weren't able to match up a type name, just search by size + if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) + return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.ShortTy)) + return CompilerType(this, ast.ShortTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.IntTy)) + return CompilerType(this, ast.IntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongTy)) + return CompilerType(this, ast.LongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.LongLongTy)) + return CompilerType(this, ast.LongLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty)) + return CompilerType(this, ast.Int128Ty.getAsOpaquePtr()); + break; - case DW_ATE_unsigned: - if (type_name) { - if (streq(type_name, "wchar_t")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->WCharTy)) { - if (!(getTargetInfo() && - TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) - return CompilerType(this, ast->WCharTy.getAsOpaquePtr()); - } - } - if (strstr(type_name, "long long")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongLongTy)) - return CompilerType(this, ast->UnsignedLongLongTy.getAsOpaquePtr()); - } else if (strstr(type_name, "long")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongTy)) - return CompilerType(this, ast->UnsignedLongTy.getAsOpaquePtr()); - } else if (strstr(type_name, "short")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedShortTy)) - return CompilerType(this, ast->UnsignedShortTy.getAsOpaquePtr()); - } else if (strstr(type_name, "char")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedCharTy)) - return CompilerType(this, ast->UnsignedCharTy.getAsOpaquePtr()); - } else if (strstr(type_name, "int")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedIntTy)) - return CompilerType(this, ast->UnsignedIntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedInt128Ty)) - return CompilerType(this, ast->UnsignedInt128Ty.getAsOpaquePtr()); + case DW_ATE_signed_char: + if (ast.getLangOpts().CharIsSigned && type_name && + streq(type_name, "char")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) + return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + } + if (QualTypeMatchesBitSize(bit_size, ast, ast.SignedCharTy)) + return CompilerType(this, ast.SignedCharTy.getAsOpaquePtr()); + break; + + case DW_ATE_unsigned: + if (type_name) { + if (streq(type_name, "wchar_t")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.WCharTy)) { + if (!(getTargetInfo() && + TargetInfo::isTypeSigned(getTargetInfo()->getWCharType()))) + return CompilerType(this, ast.WCharTy.getAsOpaquePtr()); } } - // We weren't able to match up a type name, just search by size - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedCharTy)) - return CompilerType(this, ast->UnsignedCharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedShortTy)) - return CompilerType(this, ast->UnsignedShortTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedIntTy)) - return CompilerType(this, ast->UnsignedIntTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongTy)) - return CompilerType(this, ast->UnsignedLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedLongLongTy)) - return CompilerType(this, ast->UnsignedLongLongTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedInt128Ty)) - return CompilerType(this, ast->UnsignedInt128Ty.getAsOpaquePtr()); - break; - - case DW_ATE_unsigned_char: - if (!ast->getLangOpts().CharIsSigned && type_name && - streq(type_name, "char")) { - if (QualTypeMatchesBitSize(bit_size, ast, ast->CharTy)) - return CompilerType(this, ast->CharTy.getAsOpaquePtr()); + if (strstr(type_name, "long long")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) + return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + } else if (strstr(type_name, "long")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) + return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + } else if (strstr(type_name, "short")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) + return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + } else if (strstr(type_name, "char")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) + return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + } else if (strstr(type_name, "int")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) + return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) + return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); } - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedCharTy)) - return CompilerType(this, ast->UnsignedCharTy.getAsOpaquePtr()); - if (QualTypeMatchesBitSize(bit_size, ast, ast->UnsignedShortTy)) - return CompilerType(this, ast->UnsignedShortTy.getAsOpaquePtr()); - break; + } + // We weren't able to match up a type name, just search by size + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) + return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) + return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedIntTy)) + return CompilerType(this, ast.UnsignedIntTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongTy)) + return CompilerType(this, ast.UnsignedLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedLongLongTy)) + return CompilerType(this, ast.UnsignedLongLongTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty)) + return CompilerType(this, ast.UnsignedInt128Ty.getAsOpaquePtr()); + break; - case DW_ATE_imaginary_float: - break; + case DW_ATE_unsigned_char: + if (!ast.getLangOpts().CharIsSigned && type_name && + streq(type_name, "char")) { + if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy)) + return CompilerType(this, ast.CharTy.getAsOpaquePtr()); + } + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedCharTy)) + return CompilerType(this, ast.UnsignedCharTy.getAsOpaquePtr()); + if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedShortTy)) + return CompilerType(this, ast.UnsignedShortTy.getAsOpaquePtr()); + break; - case DW_ATE_UTF: - if (type_name) { - if (streq(type_name, "char16_t")) - return CompilerType(this, ast->Char16Ty.getAsOpaquePtr()); - if (streq(type_name, "char32_t")) - return CompilerType(this, ast->Char32Ty.getAsOpaquePtr()); - if (streq(type_name, "char8_t")) - return CompilerType(this, ast->Char8Ty.getAsOpaquePtr()); - } - break; + case DW_ATE_imaginary_float: + break; + + case DW_ATE_UTF: + if (type_name) { + if (streq(type_name, "char16_t")) + return CompilerType(this, ast.Char16Ty.getAsOpaquePtr()); + if (streq(type_name, "char32_t")) + return CompilerType(this, ast.Char32Ty.getAsOpaquePtr()); + if (streq(type_name, "char8_t")) + return CompilerType(this, ast.Char8Ty.getAsOpaquePtr()); } + break; } // This assert should fire for anything that we don't catch above so we know // to fix any issues we run into. @@ -1150,13 +1144,13 @@ CompilerType ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize( } CompilerType ClangASTContext::GetCStringType(bool is_const) { - ASTContext *ast = getASTContext(); - QualType char_type(ast->CharTy); + ASTContext &ast = getASTContext(); + QualType char_type(ast.CharTy); if (is_const) char_type.addConst(); - return CompilerType(this, ast->getPointerType(char_type).getAsOpaquePtr()); + return CompilerType(this, ast.getPointerType(char_type).getAsOpaquePtr()); } clang::DeclContext * @@ -1198,7 +1192,7 @@ bool ClangASTContext::AreTypesSame(CompilerType type1, CompilerType type2, type2_qual = type2_qual.getUnqualifiedType(); } - return ast->getASTContext()->hasSameType(type1_qual, type2_qual); + return ast->getASTContext().hasSameType(type1_qual, type2_qual); } CompilerType ClangASTContext::GetTypeForDecl(void *opaque_decl) { @@ -1250,11 +1244,10 @@ CompilerType ClangASTContext::CreateRecordType(DeclContext *decl_ctx, LanguageType language, ClangASTMetadata *metadata, bool exports_symbols) { - ASTContext *ast = getASTContext(); - assert(ast != nullptr); + ASTContext &ast = getASTContext(); if (decl_ctx == nullptr) - decl_ctx = ast->getTranslationUnitDecl(); + decl_ctx = ast.getTranslationUnitDecl(); if (language == eLanguageTypeObjC || language == eLanguageTypeObjC_plus_plus) { @@ -1272,8 +1265,8 @@ CompilerType ClangASTContext::CreateRecordType(DeclContext *decl_ctx, bool has_name = !name.empty(); CXXRecordDecl *decl = CXXRecordDecl::Create( - *ast, (TagDecl::TagKind)kind, decl_ctx, SourceLocation(), - SourceLocation(), has_name ? &ast->Idents.get(name) : nullptr); + ast, (TagDecl::TagKind)kind, decl_ctx, SourceLocation(), SourceLocation(), + has_name ? &ast.Idents.get(name) : nullptr); if (!has_name) { // In C++ a lambda is also represented as an unnamed class. This is @@ -1314,7 +1307,7 @@ CompilerType ClangASTContext::CreateRecordType(DeclContext *decl_ctx, if (decl_ctx) decl_ctx->addDecl(decl); - return CompilerType(this, ast->getTagDeclType(decl).getAsOpaquePtr()); + return CompilerType(this, ast.getTagDeclType(decl).getAsOpaquePtr()); } return CompilerType(); } @@ -1387,14 +1380,14 @@ clang::FunctionTemplateDecl *ClangASTContext::CreateFunctionTemplateDecl( clang::DeclContext *decl_ctx, clang::FunctionDecl *func_decl, const char *name, const TemplateParameterInfos &template_param_infos) { // /// Create a function template node. - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); llvm::SmallVector<NamedDecl *, 8> template_param_decls; TemplateParameterList *template_param_list = CreateTemplateParameterList( - ast, template_param_infos, template_param_decls); + &ast, template_param_infos, template_param_decls); FunctionTemplateDecl *func_tmpl_decl = FunctionTemplateDecl::Create( - *ast, decl_ctx, func_decl->getLocation(), func_decl->getDeclName(), + ast, decl_ctx, func_decl->getLocation(), func_decl->getDeclName(), template_param_list, func_decl); for (size_t i = 0, template_param_decl_count = template_param_decls.size(); @@ -1419,13 +1412,13 @@ void ClangASTContext::CreateFunctionTemplateSpecializationInfo( ClassTemplateDecl *ClangASTContext::CreateClassTemplateDecl( DeclContext *decl_ctx, lldb::AccessType access_type, const char *class_name, int kind, const TemplateParameterInfos &template_param_infos) { - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); ClassTemplateDecl *class_template_decl = nullptr; if (decl_ctx == nullptr) - decl_ctx = ast->getTranslationUnitDecl(); + decl_ctx = ast.getTranslationUnitDecl(); - IdentifierInfo &identifier_info = ast->Idents.get(class_name); + IdentifierInfo &identifier_info = ast.Idents.get(class_name); DeclarationName decl_name(&identifier_info); clang::DeclContext::lookup_result result = decl_ctx->lookup(decl_name); @@ -1439,10 +1432,10 @@ ClassTemplateDecl *ClangASTContext::CreateClassTemplateDecl( llvm::SmallVector<NamedDecl *, 8> template_param_decls; TemplateParameterList *template_param_list = CreateTemplateParameterList( - ast, template_param_infos, template_param_decls); + &ast, template_param_infos, template_param_decls); CXXRecordDecl *template_cxx_decl = CXXRecordDecl::Create( - *ast, (TagDecl::TagKind)kind, + ast, (TagDecl::TagKind)kind, decl_ctx, // What decl context do we use here? TU? The actual decl // context? SourceLocation(), SourceLocation(), &identifier_info); @@ -1458,7 +1451,7 @@ ClassTemplateDecl *ClangASTContext::CreateClassTemplateDecl( // template_cxx_decl->completeDefinition(); class_template_decl = ClassTemplateDecl::Create( - *ast, + ast, decl_ctx, // What decl context do we use here? TU? The actual decl // context? SourceLocation(), decl_name, template_param_list, template_cxx_decl); @@ -1484,23 +1477,23 @@ ClassTemplateDecl *ClangASTContext::CreateClassTemplateDecl( TemplateTemplateParmDecl * ClangASTContext::CreateTemplateTemplateParmDecl(const char *template_name) { - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); - auto *decl_ctx = ast->getTranslationUnitDecl(); + auto *decl_ctx = ast.getTranslationUnitDecl(); - IdentifierInfo &identifier_info = ast->Idents.get(template_name); + IdentifierInfo &identifier_info = ast.Idents.get(template_name); llvm::SmallVector<NamedDecl *, 8> template_param_decls; ClangASTContext::TemplateParameterInfos template_param_infos; TemplateParameterList *template_param_list = CreateTemplateParameterList( - ast, template_param_infos, template_param_decls); + &ast, template_param_infos, template_param_decls); // LLDB needs to create those decls only to be able to display a // type that includes a template template argument. Only the name matters for // this purpose, so we use dummy values for the other characterisitcs of the // type. return TemplateTemplateParmDecl::Create( - *ast, decl_ctx, SourceLocation(), + ast, decl_ctx, SourceLocation(), /*Depth*/ 0, /*Position*/ 0, /*IsParameterPack*/ false, &identifier_info, template_param_list); } @@ -1509,7 +1502,7 @@ ClassTemplateSpecializationDecl * ClangASTContext::CreateClassTemplateSpecializationDecl( DeclContext *decl_ctx, ClassTemplateDecl *class_template_decl, int kind, const TemplateParameterInfos &template_param_infos) { - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); llvm::SmallVector<clang::TemplateArgument, 2> args( template_param_infos.args.size() + (template_param_infos.packed_args ? 1 : 0)); @@ -1517,13 +1510,12 @@ ClangASTContext::CreateClassTemplateSpecializationDecl( args.begin()); if (template_param_infos.packed_args) { args[args.size() - 1] = TemplateArgument::CreatePackCopy( - *ast, template_param_infos.packed_args->args); + ast, template_param_infos.packed_args->args); } ClassTemplateSpecializationDecl *class_template_specialization_decl = ClassTemplateSpecializationDecl::Create( - *ast, (TagDecl::TagKind)kind, decl_ctx, SourceLocation(), - SourceLocation(), class_template_decl, args, - nullptr); + ast, (TagDecl::TagKind)kind, decl_ctx, SourceLocation(), + SourceLocation(), class_template_decl, args, nullptr); class_template_specialization_decl->setSpecializationKind( TSK_ExplicitSpecialization); @@ -1534,11 +1526,10 @@ ClangASTContext::CreateClassTemplateSpecializationDecl( CompilerType ClangASTContext::CreateClassTemplateSpecializationType( ClassTemplateSpecializationDecl *class_template_specialization_decl) { if (class_template_specialization_decl) { - ASTContext *ast = getASTContext(); - if (ast) - return CompilerType( - this, ast->getTagDeclType(class_template_specialization_decl) - .getAsOpaquePtr()); + ASTContext &ast = getASTContext(); + return CompilerType(this, + ast.getTagDeclType(class_template_specialization_decl) + .getAsOpaquePtr()); } return CompilerType(); } @@ -1603,15 +1594,15 @@ ClangASTContext::UnifyAccessSpecifiers(clang::AccessSpecifier lhs, bool ClangASTContext::FieldIsBitfield(FieldDecl *field, uint32_t &bitfield_bit_size) { - ASTContext *ast = getASTContext(); - if (ast == nullptr || field == nullptr) + ASTContext &ast = getASTContext(); + if (field == nullptr) return false; if (field->isBitField()) { Expr *bit_width_expr = field->getBitWidth(); if (bit_width_expr) { llvm::APSInt bit_width_apsint; - if (bit_width_expr->isIntegerConstantExpr(bit_width_apsint, *ast)) { + if (bit_width_expr->isIntegerConstantExpr(bit_width_apsint, ast)) { bitfield_bit_size = bit_width_apsint.getLimitedValue(UINT32_MAX); return true; } @@ -1650,22 +1641,21 @@ CompilerType ClangASTContext::CreateObjCClass(llvm::StringRef name, bool isForwardDecl, bool isInternal, ClangASTMetadata *metadata) { - ASTContext *ast = getASTContext(); - assert(ast != nullptr); + ASTContext &ast = getASTContext(); assert(!name.empty()); if (decl_ctx == nullptr) - decl_ctx = ast->getTranslationUnitDecl(); + decl_ctx = ast.getTranslationUnitDecl(); ObjCInterfaceDecl *decl = ObjCInterfaceDecl::Create( - *ast, decl_ctx, SourceLocation(), &ast->Idents.get(name), nullptr, - nullptr, SourceLocation(), + ast, decl_ctx, SourceLocation(), &ast.Idents.get(name), nullptr, nullptr, + SourceLocation(), /*isForwardDecl,*/ isInternal); if (decl && metadata) SetMetadata(decl, *metadata); - return CompilerType(this, ast->getObjCInterfaceType(decl).getAsOpaquePtr()); + return CompilerType(this, ast.getObjCInterfaceType(decl).getAsOpaquePtr()); } static inline bool BaseSpecifierIsEmpty(const CXXBaseSpecifier *b) { @@ -1700,13 +1690,13 @@ ClangASTContext::GetNumBaseClasses(const CXXRecordDecl *cxx_record_decl, NamespaceDecl *ClangASTContext::GetUniqueNamespaceDeclaration( const char *name, DeclContext *decl_ctx, bool is_inline) { NamespaceDecl *namespace_decl = nullptr; - ASTContext *ast = getASTContext(); - TranslationUnitDecl *translation_unit_decl = ast->getTranslationUnitDecl(); + ASTContext &ast = getASTContext(); + TranslationUnitDecl *translation_unit_decl = ast.getTranslationUnitDecl(); if (decl_ctx == nullptr) decl_ctx = translation_unit_decl; if (name) { - IdentifierInfo &identifier_info = ast->Idents.get(name); + IdentifierInfo &identifier_info = ast.Idents.get(name); DeclarationName decl_name(&identifier_info); clang::DeclContext::lookup_result result = decl_ctx->lookup(decl_name); for (NamedDecl *decl : result) { @@ -1716,7 +1706,7 @@ NamespaceDecl *ClangASTContext::GetUniqueNamespaceDeclaration( } namespace_decl = - NamespaceDecl::Create(*ast, decl_ctx, is_inline, SourceLocation(), + NamespaceDecl::Create(ast, decl_ctx, is_inline, SourceLocation(), SourceLocation(), &identifier_info, nullptr); decl_ctx->addDecl(namespace_decl); @@ -1727,7 +1717,7 @@ NamespaceDecl *ClangASTContext::GetUniqueNamespaceDeclaration( return namespace_decl; namespace_decl = - NamespaceDecl::Create(*ast, decl_ctx, false, SourceLocation(), + NamespaceDecl::Create(ast, decl_ctx, false, SourceLocation(), SourceLocation(), nullptr, nullptr); translation_unit_decl->setAnonymousNamespace(namespace_decl); translation_unit_decl->addDecl(namespace_decl); @@ -1739,7 +1729,7 @@ NamespaceDecl *ClangASTContext::GetUniqueNamespaceDeclaration( if (namespace_decl) return namespace_decl; namespace_decl = - NamespaceDecl::Create(*ast, decl_ctx, false, SourceLocation(), + NamespaceDecl::Create(ast, decl_ctx, false, SourceLocation(), SourceLocation(), nullptr, nullptr); parent_namespace_decl->setAnonymousNamespace(namespace_decl); parent_namespace_decl->addDecl(namespace_decl); @@ -1760,8 +1750,8 @@ NamespaceDecl *ClangASTContext::GetUniqueNamespaceDeclaration( clang::BlockDecl * ClangASTContext::CreateBlockDeclaration(clang::DeclContext *ctx) { if (ctx != nullptr) { - clang::BlockDecl *decl = clang::BlockDecl::Create(*getASTContext(), ctx, - clang::SourceLocation()); + clang::BlockDecl *decl = + clang::BlockDecl::Create(getASTContext(), ctx, clang::SourceLocation()); ctx->addDecl(decl); return decl; } @@ -1789,9 +1779,9 @@ clang::UsingDirectiveDecl *ClangASTContext::CreateUsingDirectiveDeclaration( clang::DeclContext *decl_ctx, clang::NamespaceDecl *ns_decl) { if (decl_ctx != nullptr && ns_decl != nullptr) { clang::TranslationUnitDecl *translation_unit = - (clang::TranslationUnitDecl *)GetTranslationUnitDecl(getASTContext()); + (clang::TranslationUnitDecl *)GetTranslationUnitDecl(&getASTContext()); clang::UsingDirectiveDecl *using_decl = clang::UsingDirectiveDecl::Create( - *getASTContext(), decl_ctx, clang::SourceLocation(), + getASTContext(), decl_ctx, clang::SourceLocation(), clang::SourceLocation(), clang::NestedNameSpecifierLoc(), clang::SourceLocation(), ns_decl, FindLCABetweenDecls(decl_ctx, ns_decl, translation_unit)); @@ -1806,10 +1796,10 @@ ClangASTContext::CreateUsingDeclaration(clang::DeclContext *current_decl_ctx, clang::NamedDecl *target) { if (current_decl_ctx != nullptr && target != nullptr) { clang::UsingDecl *using_decl = clang::UsingDecl::Create( - *getASTContext(), current_decl_ctx, clang::SourceLocation(), + getASTContext(), current_decl_ctx, clang::SourceLocation(), clang::NestedNameSpecifierLoc(), clang::DeclarationNameInfo(), false); clang::UsingShadowDecl *shadow_decl = clang::UsingShadowDecl::Create( - *getASTContext(), current_decl_ctx, clang::SourceLocation(), using_decl, + getASTContext(), current_decl_ctx, clang::SourceLocation(), using_decl, target); using_decl->addShadowDecl(shadow_decl); current_decl_ctx->addDecl(using_decl); @@ -1822,9 +1812,9 @@ clang::VarDecl *ClangASTContext::CreateVariableDeclaration( clang::DeclContext *decl_context, const char *name, clang::QualType type) { if (decl_context != nullptr) { clang::VarDecl *var_decl = clang::VarDecl::Create( - *getASTContext(), decl_context, clang::SourceLocation(), + getASTContext(), decl_context, clang::SourceLocation(), clang::SourceLocation(), - name && name[0] ? &getASTContext()->Idents.getOwn(name) : nullptr, type, + name && name[0] ? &getASTContext().Idents.getOwn(name) : nullptr, type, nullptr, clang::SC_None); var_decl->setAccess(clang::AS_public); decl_context->addDecl(var_decl); @@ -1914,7 +1904,7 @@ ClangASTContext::GetDeclarationName(const char *name, clang::OverloadedOperatorKind op_kind = clang::NUM_OVERLOADED_OPERATORS; if (!IsOperator(name, op_kind) || op_kind == clang::NUM_OVERLOADED_OPERATORS) - return DeclarationName(&getASTContext()->Idents.get( + return DeclarationName(&getASTContext().Idents.get( name)); // Not operator, but a regular function. // Check the number of operator parameters. Sometimes we have seen bad DWARF @@ -1933,16 +1923,16 @@ ClangASTContext::GetDeclarationName(const char *name, is_method, op_kind, num_params)) return clang::DeclarationName(); - return getASTContext()->DeclarationNames.getCXXOperatorName(op_kind); + return getASTContext().DeclarationNames.getCXXOperatorName(op_kind); } FunctionDecl *ClangASTContext::CreateFunctionDeclaration( DeclContext *decl_ctx, const char *name, const CompilerType &function_clang_type, int storage, bool is_inline) { FunctionDecl *func_decl = nullptr; - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); if (decl_ctx == nullptr) - decl_ctx = ast->getTranslationUnitDecl(); + decl_ctx = ast.getTranslationUnitDecl(); const bool hasWrittenPrototype = true; const bool isConstexprSpecified = false; @@ -1950,7 +1940,7 @@ FunctionDecl *ClangASTContext::CreateFunctionDeclaration( clang::DeclarationName declarationName = GetDeclarationName(name, function_clang_type); func_decl = FunctionDecl::Create( - *ast, decl_ctx, SourceLocation(), SourceLocation(), declarationName, + ast, decl_ctx, SourceLocation(), SourceLocation(), declarationName, ClangUtil::GetQualType(function_clang_type), nullptr, (clang::StorageClass)storage, is_inline, hasWrittenPrototype, isConstexprSpecified ? CSK_constexpr : CSK_unspecified); @@ -2009,11 +1999,10 @@ CompilerType ClangASTContext::CreateFunctionType( ParmVarDecl *ClangASTContext::CreateParameterDeclaration( clang::DeclContext *decl_ctx, const char *name, const CompilerType ¶m_type, int storage, bool add_decl) { - ASTContext *ast = getASTContext(); - assert(ast != nullptr); + ASTContext &ast = getASTContext(); auto *decl = - ParmVarDecl::Create(*ast, decl_ctx, SourceLocation(), SourceLocation(), - name && name[0] ? &ast->Idents.get(name) : nullptr, + ParmVarDecl::Create(ast, decl_ctx, SourceLocation(), SourceLocation(), + name && name[0] ? &ast.Idents.get(name) : nullptr, ClangUtil::GetQualType(param_type), nullptr, (clang::StorageClass)storage, nullptr); if (add_decl) @@ -2043,28 +2032,27 @@ CompilerType ClangASTContext::CreateArrayType(const CompilerType &element_type, size_t element_count, bool is_vector) { if (element_type.IsValid()) { - ASTContext *ast = getASTContext(); - assert(ast != nullptr); + ASTContext &ast = getASTContext(); if (is_vector) { return CompilerType( - this, ast->getExtVectorType(ClangUtil::GetQualType(element_type), - element_count) + this, ast.getExtVectorType(ClangUtil::GetQualType(element_type), + element_count) .getAsOpaquePtr()); } else { llvm::APInt ap_element_count(64, element_count); if (element_count == 0) { - return CompilerType(this, ast->getIncompleteArrayType( + return CompilerType(this, ast.getIncompleteArrayType( ClangUtil::GetQualType(element_type), clang::ArrayType::Normal, 0) .getAsOpaquePtr()); } else { - return CompilerType(this, ast->getConstantArrayType( - ClangUtil::GetQualType(element_type), - ap_element_count, nullptr, - clang::ArrayType::Normal, 0) - .getAsOpaquePtr()); + return CompilerType( + this, ast.getConstantArrayType(ClangUtil::GetQualType(element_type), + ap_element_count, nullptr, + clang::ArrayType::Normal, 0) + .getAsOpaquePtr()); } } } @@ -2117,14 +2105,14 @@ ClangASTContext::CreateEnumerationType(const char *name, DeclContext *decl_ctx, bool is_scoped) { // TODO: Do something intelligent with the Declaration object passed in // like maybe filling in the SourceLocation with it... - ASTContext *ast = getASTContext(); + ASTContext &ast = getASTContext(); // TODO: ask about these... // const bool IsFixed = false; EnumDecl *enum_decl = EnumDecl::Create( - *ast, decl_ctx, SourceLocation(), SourceLocation(), - name && name[0] ? &ast->Idents.get(name) : nullptr, nullptr, + ast, decl_ctx, SourceLocation(), SourceLocation(), + name && name[0] ? &ast.Idents.get(name) : nullptr, nullptr, is_scoped, // IsScoped is_scoped, // IsScopedUsingClassTag false); // IsFixed @@ -2138,7 +2126,7 @@ ClangASTContext::CreateEnumerationType(const char *name, DeclContext *decl_ctx, enum_decl->setAccess(AS_public); // TODO respect what's in the debug info - return CompilerType(this, ast->getTagDeclType(enum_decl).getAsOpaquePtr()); + return CompilerType(this, ast.getTagDeclType(enum_decl).getAsOpaquePtr()); } return CompilerType(); } @@ -2377,14 +2365,14 @@ void ClangASTContext::SetMetadataAsUserID(const clang::Type *type, void ClangASTContext::SetMetadata(const clang::Decl *object, ClangASTMetadata &metadata) { if (auto *A = llvm::dyn_cast_or_null<ClangExternalASTSourceCommon>( - getASTContext()->getExternalSource())) + getASTContext().getExternalSource())) A->SetMetadata(object, metadata); } void ClangASTContext::SetMetadata(const clang::Type *object, ClangASTMetadata &metadata) { if (auto *A = llvm::dyn_cast_or_null<ClangExternalASTSourceCommon>( - getASTContext()->getExternalSource())) + getASTContext().getExternalSource())) A->SetMetadata(object, metadata); } @@ -2787,8 +2775,9 @@ bool ClangASTContext::IsVectorType(lldb::opaque_compiler_type_t type, bool ClangASTContext::IsRuntimeGeneratedType( lldb::opaque_compiler_type_t type) { - clang::DeclContext *decl_ctx = ClangASTContext::GetASTContext(getASTContext()) - ->GetDeclContextForType(GetQualType(type)); + clang::DeclContext *decl_ctx = + ClangASTContext::GetASTContext(&getASTContext()) + ->GetDeclContextForType(GetQualType(type)); if (!decl_ctx) return false; @@ -2799,7 +2788,7 @@ bool ClangASTContext::IsRuntimeGeneratedType( llvm::dyn_cast<clang::ObjCInterfaceDecl>(decl_ctx); ClangASTMetadata *ast_metadata = - ClangASTContext::GetMetadata(getASTContext(), result_iface_decl); + ClangASTContext::GetMetadata(&getASTContext(), result_iface_decl); if (!ast_metadata) return false; return (ast_metadata->GetISAPtr() != 0); @@ -2811,7 +2800,7 @@ bool ClangASTContext::IsCharType(lldb::opaque_compiler_type_t type) { bool ClangASTContext::IsCompleteType(lldb::opaque_compiler_type_t type) { const bool allow_completion = false; - return GetCompleteQualType(getASTContext(), GetQualType(type), + return GetCompleteQualType(&getASTContext(), GetQualType(type), allow_completion); } @@ -2913,7 +2902,7 @@ ClangASTContext::IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, for (field_pos = record_decl->field_begin(); field_pos != field_end; ++field_pos) { clang::QualType field_qual_type = field_pos->getType(); - uint64_t field_bitwidth = getASTContext()->getTypeSize(qual_type); + uint64_t field_bitwidth = getASTContext().getTypeSize(qual_type); if (field_qual_type->isFloatingType()) { if (field_qual_type->isComplexType()) return 0; @@ -3451,7 +3440,7 @@ bool ClangASTContext::IsPossibleDynamicType(lldb::opaque_compiler_type_t type, success = cxx_record_decl->isDynamicClass(); else { ClangASTMetadata *metadata = ClangASTContext::GetMetadata( - getASTContext(), cxx_record_decl); + &getASTContext(), cxx_record_decl); if (metadata) success = metadata->GetIsDynamicCXXType(); else { @@ -3594,14 +3583,14 @@ bool ClangASTContext::GetCompleteType(lldb::opaque_compiler_type_t type) { if (!type) return false; const bool allow_completion = true; - return GetCompleteQualType(getASTContext(), GetQualType(type), + return GetCompleteQualType(&getASTContext(), GetQualType(type), allow_completion); } ConstString ClangASTContext::GetTypeName(lldb::opaque_compiler_type_t type) { std::string type_name; if (type) { - clang::PrintingPolicy printing_policy(getASTContext()->getPrintingPolicy()); + clang::PrintingPolicy printing_policy(getASTContext().getPrintingPolicy()); clang::QualType qual_type(GetQualType(type)); printing_policy.SuppressTagKeyword = true; const clang::TypedefType *typedef_type = @@ -3645,14 +3634,14 @@ ClangASTContext::GetTypeInfo(lldb::opaque_compiler_type_t type, case clang::BuiltinType::ObjCClass: if (pointee_or_element_clang_type) pointee_or_element_clang_type->SetCompilerType( - this, getASTContext()->ObjCBuiltinClassTy.getAsOpaquePtr()); + this, getASTContext().ObjCBuiltinClassTy.getAsOpaquePtr()); builtin_type_flags |= eTypeIsPointer | eTypeIsObjC; break; case clang::BuiltinType::ObjCSel: if (pointee_or_element_clang_type) pointee_or_element_clang_type->SetCompilerType( - this, getASTContext()->CharTy.getAsOpaquePtr()); + this, getASTContext().CharTy.getAsOpaquePtr()); builtin_type_flags |= eTypeIsPointer | eTypeIsObjC; break; @@ -3840,7 +3829,7 @@ ClangASTContext::GetMinimumLanguage(lldb::opaque_compiler_type_t type) { if (pointee_type->isObjCClassType()) return lldb::eLanguageTypeObjC; if (pointee_type.getTypePtr() == - getASTContext()->ObjCBuiltinIdTy.getTypePtr()) + getASTContext().ObjCBuiltinIdTy.getTypePtr()) return lldb::eLanguageTypeObjC; } else { if (qual_type->isObjCObjectOrInterfaceType()) @@ -4062,22 +4051,21 @@ CompilerType ClangASTContext::GetArrayType(lldb::opaque_compiler_type_t type, uint64_t size) { if (type) { clang::QualType qual_type(GetCanonicalQualType(type)); - if (clang::ASTContext *ast_ctx = getASTContext()) { - if (size != 0) - return CompilerType( - this, ast_ctx - ->getConstantArrayType( - qual_type, llvm::APInt(64, size), nullptr, - clang::ArrayType::ArraySizeModifier::Normal, 0) - .getAsOpaquePtr()); - else - return CompilerType( - this, - ast_ctx - ->getIncompleteArrayType( - qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0) - .getAsOpaquePtr()); - } + clang::ASTContext &ast_ctx = getASTContext(); + if (size != 0) + return CompilerType( + this, ast_ctx + .getConstantArrayType( + qual_type, llvm::APInt(64, size), nullptr, + clang::ArrayType::ArraySizeModifier::Normal, 0) + .getAsOpaquePtr()); + else + return CompilerType( + this, + ast_ctx + .getIncompleteArrayType( + qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0) + .getAsOpaquePtr()); } return CompilerType(); @@ -4107,8 +4095,8 @@ CompilerType ClangASTContext::GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) { if (type) return CompilerType( - this, - GetFullyUnqualifiedType_Impl(getASTContext(), GetQualType(type)).getAsOpaquePtr()); + this, GetFullyUnqualifiedType_Impl(&getASTContext(), GetQualType(type)) + .getAsOpaquePtr()); return CompilerType(); } @@ -4156,7 +4144,7 @@ ClangASTContext::GetNumMemberFunctions(lldb::opaque_compiler_type_t type) { clang::QualType qual_type = RemoveWrappingTypes(GetCanonicalQualType(type)); switch (qual_type->getTypeClass()) { case clang::Type::Record: - if (GetCompleteQualType(getASTContext(), qual_type)) { + if (GetCompleteQualType(&getASTContext(), qual_type)) { const clang::RecordType *record_type = llvm::cast<clang::RecordType>(qual_type.getTypePtr()); const clang::RecordDecl *record_decl = record_type->getDecl(); @@ -4220,7 +4208,7 @@ ClangASTContext::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, clang::QualType qual_type = RemoveWrappingTypes(GetCanonicalQualType(type)); switch (qual_type->getTypeClass()) { case clang::Type::Record: - if (GetCompleteQualType(getASTContext(), qual_type)) { + if (GetCompleteQualType(&getASTContext(), qual_type)) { const clang::RecordType *record_type = llvm::cast<clang::RecordType>(qual_type.getTypePtr()); const clang::RecordDecl *record_decl = record_type->getDecl(); @@ -4343,25 +4331,25 @@ CompilerType ClangASTContext::CreateTypedefType( llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem()); if (!ast) return CompilerType(); - clang::ASTContext *clang_ast = ast->getASTContext(); + clang::ASTContext &clang_ast = ast->getASTContext(); clang::QualType qual_type(ClangUtil::GetQualType(type)); clang::DeclContext *decl_ctx = ClangASTContext::DeclContextGetAsDeclContext(compiler_decl_ctx); if (decl_ctx == nullptr) - decl_ctx = ast->getASTContext()->getTranslationUnitDecl(); + decl_ctx = ast->getASTContext().getTranslationUnitDecl(); clang::TypedefDecl *decl = clang::TypedefDecl::Create( - *clang_ast, decl_ctx, clang::SourceLocation(), clang::SourceLocation(), - &clang_ast->Idents.get(typedef_name), - clang_ast->getTrivialTypeSourceInfo(qual_type)); + clang_ast, decl_ctx, clang::SourceLocation(), clang::SourceLocation(), + &clang_ast.Idents.get(typedef_name), + clang_ast.getTrivialTypeSourceInfo(qual_type)); decl->setAccess(clang::AS_public); // TODO respect proper access specifier decl_ctx->addDecl(decl); // Get a uniqued clang::QualType for the typedef decl type - return CompilerType(ast, clang_ast->getTypedefType(decl).getAsOpaquePtr()); + return CompilerType(ast, clang_ast.getTypedefType(decl).getAsOpaquePtr()); } return CompilerType(); } @@ -4385,13 +4373,13 @@ ClangASTContext::GetPointerType(lldb::opaque_compiler_type_t type) { switch (type_class) { case clang::Type::ObjCObject: case clang::Type::ObjCInterface: - return CompilerType(this, getASTContext() - ->getObjCObjectPointerType(qual_type) - .getAsOpaquePtr()); + return CompilerType( + this, + getASTContext().getObjCObjectPointerType(qual_type).getAsOpaquePtr()); default: return CompilerType( - this, getASTContext()->getPointerType(qual_type).getAsOpaquePtr()); + this, getASTContext().getPointerType(qual_type).getAsOpaquePtr()); } } return CompilerType(); @@ -4401,7 +4389,7 @@ CompilerType ClangASTContext::GetLValueReferenceType(lldb::opaque_compiler_type_t type) { if (type) return CompilerType(this, getASTContext() - ->getLValueReferenceType(GetQualType(type)) + .getLValueReferenceType(GetQualType(type)) .getAsOpaquePtr()); else return CompilerType(); @@ -4411,7 +4399,7 @@ CompilerType ClangASTContext::GetRValueReferenceType(lldb::opaque_compiler_type_t type) { if (type) return CompilerType(this, getASTContext() - ->getRValueReferenceType(GetQualType(type)) + .getRValueReferenceType(GetQualType(type)) .getAsOpaquePtr()); else return CompilerType(); @@ -4421,7 +4409,7 @@ CompilerType ClangASTContext::GetAtomicType(lldb::opaque_compiler_type_t type) { if (!type) return CompilerType(); return CompilerType( - this, getASTContext()->getAtomicType(GetQualType(type)).getAsOpaquePtr()); + this, getASTContext().getAtomicType(GetQualType(type)).getAsOpaquePtr()); } CompilerType @@ -4459,18 +4447,18 @@ ClangASTContext::CreateTypedef(lldb::opaque_compiler_type_t type, const char *typedef_name, const CompilerDeclContext &compiler_decl_ctx) { if (type) { - clang::ASTContext *clang_ast = getASTContext(); + clang::ASTContext &clang_ast = getASTContext(); clang::QualType qual_type(GetQualType(type)); clang::DeclContext *decl_ctx = ClangASTContext::DeclContextGetAsDeclContext(compiler_decl_ctx); if (decl_ctx == nullptr) - decl_ctx = getASTContext()->getTranslationUnitDecl(); + decl_ctx = getASTContext().getTranslationUnitDecl(); clang::TypedefDecl *decl = clang::TypedefDecl::Create( - *clang_ast, decl_ctx, clang::SourceLocation(), clang::SourceLocation(), - &clang_ast->Idents.get(typedef_name), - clang_ast->getTrivialTypeSourceInfo(qual_type)); + clang_ast, decl_ctx, clang::SourceLocation(), clang::SourceLocation(), + &clang_ast.Idents.get(typedef_name), + clang_ast.getTrivialTypeSourceInfo(qual_type)); clang::TagDecl *tdecl = nullptr; if (!qual_type.isNull()) { @@ -4489,7 +4477,7 @@ ClangASTContext::CreateTypedef(lldb::opaque_compiler_type_t type, decl->setAccess(clang::AS_public); // TODO respect proper access specifier // Get a uniqued clang::QualType for the typedef decl type - return CompilerType(this, clang_ast->getTypedefType(decl).getAsOpaquePtr()); + return CompilerType(this, clang_ast.getTypedefType(decl).getAsOpaquePtr()); } return CompilerType(); } @@ -4515,17 +4503,16 @@ CompilerType ClangASTContext::GetBasicTypeFromAST(lldb::BasicType basic_type) { const llvm::fltSemantics & ClangASTContext::GetFloatTypeSemantics(size_t byte_size) { - if (auto *ast = getASTContext()) { - const size_t bit_size = byte_size * 8; - if (bit_size == ast->getTypeSize(ast->FloatTy)) - return ast->getFloatTypeSemantics(ast->FloatTy); - else if (bit_size == ast->getTypeSize(ast->DoubleTy)) - return ast->getFloatTypeSemantics(ast->DoubleTy); - else if (bit_size == ast->getTypeSize(ast->LongDoubleTy)) - return ast->getFloatTypeSemantics(ast->LongDoubleTy); - else if (bit_size == ast->getTypeSize(ast->HalfTy)) - return ast->getFloatTypeSemantics(ast->HalfTy); - } + clang::ASTContext &ast = getASTContext(); + const size_t bit_size = byte_size * 8; + if (bit_size == ast.getTypeSize(ast.FloatTy)) + return ast.getFloatTypeSemantics(ast.FloatTy); + else if (bit_size == ast.getTypeSize(ast.DoubleTy)) + return ast.getFloatTypeSemantics(ast.DoubleTy); + else if (bit_size == ast.getTypeSize(ast.LongDoubleTy)) + return ast.getFloatTypeSemantics(ast.LongDoubleTy); + else if (bit_size == ast.getTypeSize(ast.HalfTy)) + return ast.getFloatTypeSemantics(ast.HalfTy); return llvm::APFloatBase::Bogus(); } @@ -4538,7 +4525,7 @@ ClangASTContext::GetBitSize(lldb::opaque_compiler_type_t type, switch (type_class) { case clang::Type::Record: if (GetCompleteType(type)) - return getASTContext()->getTypeSize(qual_type); + return getASTContext().getTypeSize(qual_type); else return None; break; @@ -4574,17 +4561,16 @@ ClangASTContext::GetBitSize(lldb::opaque_compiler_type_t type, } LLVM_FALLTHROUGH; default: - const uint32_t bit_size = getASTContext()->getTypeSize(qual_type); + const uint32_t bit_size = getASTContext().getTypeSize(qual_type); if (bit_size == 0) { if (qual_type->isIncompleteArrayType()) - return getASTContext()->getTypeSize( + return getASTContext().getTypeSize( qual_type->getArrayElementTypeNoTypeQual() ->getCanonicalTypeUnqualified()); } if (qual_type->isObjCObjectOrInterfaceType()) return bit_size + - getASTContext()->getTypeSize( - getASTContext()->ObjCBuiltinClassTy); + getASTContext().getTypeSize(getASTContext().ObjCBuiltinClassTy); // Function types actually have a size of 0, that's not an error. if (qual_type->isFunctionProtoType()) return bit_size; @@ -4599,7 +4585,7 @@ llvm::Optional<size_t> ClangASTContext::GetTypeBitAlign(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) { if (GetCompleteType(type)) - return getASTContext()->getTypeAlign(GetQualType(type)); + return getASTContext().getTypeAlign(GetQualType(type)); return {}; } @@ -5053,7 +5039,7 @@ uint32_t ClangASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, case clang::Type::Complex: return 0; case clang::Type::Record: - if (GetCompleteQualType(getASTContext(), qual_type)) { + if (GetCompleteQualType(&getASTContext(), qual_type)) { const clang::RecordType *record_type = llvm::cast<clang::RecordType>(qual_type.getTypePtr()); const clang::RecordDecl *record_decl = record_type->getDecl(); @@ -5097,7 +5083,7 @@ uint32_t ClangASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, case clang::Type::ObjCObject: case clang::Type::ObjCInterface: - if (GetCompleteQualType(getASTContext(), qual_type)) { + if (GetCompleteQualType(&getASTContext(), qual_type)) { const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type.getTypePtr()); assert(objc_class_type); @@ -5444,7 +5430,7 @@ CompilerType ClangASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, // alignment (field_type_info.second) from the AST context. if (bit_offset_ptr) { const clang::ASTRecordLayout &record_layout = - getASTContext()->getASTRecordLayout(record_decl); + getASTContext().getASTRecordLayout(record_decl); *bit_offset_ptr = record_layout.getFieldOffset(field_idx); } @@ -5458,7 +5444,7 @@ CompilerType ClangASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, clang::Expr::EvalResult result; if (bitfield_bit_size_expr && bitfield_bit_size_expr->EvaluateAsInt(result, - *getASTContext())) { + getASTContext())) { llvm::APSInt bitfield_apsint = result.Val.getInt(); *bitfield_bit_size_ptr = bitfield_apsint.getLimitedValue(); } @@ -5485,7 +5471,7 @@ CompilerType ClangASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, objc_interface_type->getDecl(); if (class_interface_decl) { return CompilerType( - this, GetObjCFieldAtIndex(getASTContext(), class_interface_decl, + this, GetObjCFieldAtIndex(&getASTContext(), class_interface_decl, idx, name, bit_offset_ptr, bitfield_bit_size_ptr, is_bitfield_ptr)); } @@ -5503,7 +5489,7 @@ CompilerType ClangASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface(); return CompilerType( - this, GetObjCFieldAtIndex(getASTContext(), class_interface_decl, + this, GetObjCFieldAtIndex(&getASTContext(), class_interface_decl, idx, name, bit_offset_ptr, bitfield_bit_size_ptr, is_bitfield_ptr)); } @@ -5608,7 +5594,7 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( if (curr_idx == idx) { if (bit_offset_ptr) { const clang::ASTRecordLayout &record_layout = - getASTContext()->getASTRecordLayout(cxx_record_decl); + getASTContext().getASTRecordLayout(cxx_record_decl); const clang::CXXRecordDecl *base_class_decl = llvm::cast<clang::CXXRecordDecl>( base_class->getType() @@ -5649,9 +5635,10 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( if (superclass_interface_decl) { if (bit_offset_ptr) *bit_offset_ptr = 0; - return CompilerType(this, - getASTContext()->getObjCInterfaceType( - superclass_interface_decl).getAsOpaquePtr()); + return CompilerType( + this, getASTContext() + .getObjCInterfaceType(superclass_interface_decl) + .getAsOpaquePtr()); } } } @@ -5673,7 +5660,7 @@ CompilerType ClangASTContext::GetDirectBaseClassAtIndex( *bit_offset_ptr = 0; return CompilerType( this, getASTContext() - ->getObjCInterfaceType(superclass_interface_decl) + .getObjCInterfaceType(superclass_interface_decl) .getAsOpaquePtr()); } } @@ -5706,7 +5693,7 @@ CompilerType ClangASTContext::GetVirtualBaseClassAtIndex( if (curr_idx == idx) { if (bit_offset_ptr) { const clang::ASTRecordLayout &record_layout = - getASTContext()->getASTRecordLayout(cxx_record_decl); + getASTContext().getASTRecordLayout(cxx_record_decl); const clang::CXXRecordDecl *base_class_decl = llvm::cast<clang::CXXRecordDecl>( base_class->getType() @@ -5903,10 +5890,10 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( case clang::BuiltinType::ObjCClass: child_name = "isa"; child_byte_size = - getASTContext()->getTypeSize(getASTContext()->ObjCBuiltinClassTy) / + getASTContext().getTypeSize(getASTContext().ObjCBuiltinClassTy) / CHAR_BIT; return CompilerType( - this, getASTContext()->ObjCBuiltinClassTy.getAsOpaquePtr()); + this, getASTContext().ObjCBuiltinClassTy.getAsOpaquePtr()); default: break; @@ -5921,7 +5908,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( const clang::RecordDecl *record_decl = record_type->getDecl(); assert(record_decl); const clang::ASTRecordLayout &record_layout = - getASTContext()->getASTRecordLayout(record_decl); + getASTContext().getASTRecordLayout(record_decl); uint32_t child_idx = 0; const clang::CXXRecordDecl *cxx_record_decl = @@ -5952,7 +5939,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( bool handled = false; if (valobj) { clang::VTableContextBase *vtable_ctx = - getASTContext()->getVTableContext(); + getASTContext().getVTableContext(); if (vtable_ctx) handled = GetVBaseBitOffset(*vtable_ctx, *valobj, record_layout, cxx_record_decl, @@ -6044,27 +6031,27 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( if (class_interface_decl) { const clang::ASTRecordLayout &interface_layout = - getASTContext()->getASTObjCInterfaceLayout(class_interface_decl); + getASTContext().getASTObjCInterfaceLayout(class_interface_decl); clang::ObjCInterfaceDecl *superclass_interface_decl = class_interface_decl->getSuperClass(); if (superclass_interface_decl) { if (omit_empty_base_classes) { CompilerType base_class_clang_type( this, getASTContext() - ->getObjCInterfaceType(superclass_interface_decl) + .getObjCInterfaceType(superclass_interface_decl) .getAsOpaquePtr()); if (base_class_clang_type.GetNumChildren(omit_empty_base_classes, exe_ctx) > 0) { if (idx == 0) { clang::QualType ivar_qual_type( - getASTContext()->getObjCInterfaceType( + getASTContext().getObjCInterfaceType( superclass_interface_decl)); child_name.assign( superclass_interface_decl->getNameAsString()); clang::TypeInfo ivar_type_info = - getASTContext()->getTypeInfo(ivar_qual_type.getTypePtr()); + getASTContext().getTypeInfo(ivar_qual_type.getTypePtr()); child_byte_size = ivar_type_info.Width / 8; child_byte_offset = 0; @@ -6095,7 +6082,7 @@ CompilerType ClangASTContext::GetChildCompilerTypeAtIndex( child_name.assign(ivar_decl->getNameAsString()); clang::TypeInfo ivar_type_info = - getASTContext()->getTypeInfo(ivar_qual_type.getTypePtr()); + getASTContext().getTypeInfo(ivar_qual_type.getTypePtr()); child_byte_size = ivar_type_info.Width / 8; @@ -6455,7 +6442,7 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( // const Decl *root_cdecl = cxx_record_decl->getCanonicalDecl(); // Didn't find things easily, lets let clang do its thang... clang::IdentifierInfo &ident_ref = - getASTContext()->Idents.get(name_sref); + getASTContext().Idents.get(name_sref); clang::DeclarationName decl_name(&ident_ref); clang::CXXBasePaths paths; @@ -6544,7 +6531,7 @@ size_t ClangASTContext::GetIndexOfChildMemberWithName( CompilerType superclass_clang_type( this, getASTContext() - ->getObjCInterfaceType(superclass_interface_decl) + .getObjCInterfaceType(superclass_interface_decl) .getAsOpaquePtr()); if (superclass_clang_type.GetIndexOfChildMemberWithName( name, omit_empty_base_classes, child_indexes)) { @@ -7030,26 +7017,26 @@ clang::FieldDecl *ClangASTContext::AddFieldToRecordType( llvm::dyn_cast_or_null<ClangASTContext>(type.GetTypeSystem()); if (!ast) return nullptr; - clang::ASTContext *clang_ast = ast->getASTContext(); + clang::ASTContext &clang_ast = ast->getASTContext(); clang::IdentifierInfo *ident = nullptr; if (!name.empty()) - ident = &clang_ast->Idents.get(name); + ident = &clang_ast.Idents.get(name); clang::FieldDecl *field = nullptr; clang::Expr *bit_width = nullptr; if (bitfield_bit_size != 0) { - llvm::APInt bitfield_bit_size_apint( - clang_ast->getTypeSize(clang_ast->IntTy), bitfield_bit_size); - bit_width = new (*clang_ast) - clang::IntegerLiteral(*clang_ast, bitfield_bit_size_apint, - clang_ast->IntTy, clang::SourceLocation()); + llvm::APInt bitfield_bit_size_apint(clang_ast.getTypeSize(clang_ast.IntTy), + bitfield_bit_size); + bit_width = new (clang_ast) + clang::IntegerLiteral(clang_ast, bitfield_bit_size_apint, + clang_ast.IntTy, clang::SourceLocation()); } clang::RecordDecl *record_decl = ast->GetAsRecordDecl(type); if (record_decl) { field = clang::FieldDecl::Create( - *clang_ast, record_decl, clang::SourceLocation(), + clang_ast, record_decl, clang::SourceLocation(), clang::SourceLocation(), ident, // Identifier ClangUtil::GetQualType(field_clang_type), // Field type @@ -7092,7 +7079,7 @@ clang::FieldDecl *ClangASTContext::AddFieldToRecordType( field_clang_type.GetCompleteType(); field = clang::ObjCIvarDecl::Create( - *clang_ast, class_interface_decl, clang::SourceLocation(), + clang_ast, class_interface_decl, clang::SourceLocation(), clang::SourceLocation(), ident, // Identifier ClangUtil::GetQualType(field_clang_type), // Field type @@ -7154,12 +7141,12 @@ void ClangASTContext::BuildIndirectFields(const CompilerType &type) { if (clang::FieldDecl *nested_field_decl = llvm::dyn_cast<clang::FieldDecl>(*di)) { clang::NamedDecl **chain = - new (*ast->getASTContext()) clang::NamedDecl *[2]; + new (ast->getASTContext()) clang::NamedDecl *[2]; chain[0] = *field_pos; chain[1] = nested_field_decl; clang::IndirectFieldDecl *indirect_field = clang::IndirectFieldDecl::Create( - *ast->getASTContext(), record_decl, clang::SourceLocation(), + ast->getASTContext(), record_decl, clang::SourceLocation(), nested_field_decl->getIdentifier(), nested_field_decl->getType(), {chain, 2}); @@ -7173,7 +7160,7 @@ void ClangASTContext::BuildIndirectFields(const CompilerType &type) { llvm::dyn_cast<clang::IndirectFieldDecl>(*di)) { size_t nested_chain_size = nested_indirect_field_decl->getChainingSize(); - clang::NamedDecl **chain = new (*ast->getASTContext()) + clang::NamedDecl **chain = new (ast->getASTContext()) clang::NamedDecl *[nested_chain_size + 1]; chain[0] = *field_pos; @@ -7188,7 +7175,7 @@ void ClangASTContext::BuildIndirectFields(const CompilerType &type) { clang::IndirectFieldDecl *indirect_field = clang::IndirectFieldDecl::Create( - *ast->getASTContext(), record_decl, clang::SourceLocation(), + ast->getASTContext(), record_decl, clang::SourceLocation(), nested_indirect_field_decl->getIdentifier(), nested_indirect_field_decl->getType(), {chain, nested_chain_size + 1}); @@ -7229,7 +7216,7 @@ void ClangASTContext::SetIsPacked(const CompilerType &type) { return; record_decl->addAttr( - clang::PackedAttr::CreateImplicit(*ast->getASTContext())); + clang::PackedAttr::CreateImplicit(ast->getASTContext())); } } } @@ -7251,10 +7238,10 @@ clang::VarDecl *ClangASTContext::AddVariableToRecordType( clang::VarDecl *var_decl = nullptr; clang::IdentifierInfo *ident = nullptr; if (!name.empty()) - ident = &ast->getASTContext()->Idents.get(name); + ident = &ast->getASTContext().Idents.get(name); var_decl = clang::VarDecl::Create( - *ast->getASTContext(), // ASTContext & + ast->getASTContext(), // ASTContext & record_decl, // DeclContext * clang::SourceLocation(), // clang::SourceLocation StartLoc clang::SourceLocation(), // clang::SourceLocation IdLoc @@ -7297,7 +7284,7 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( clang::CXXMethodDecl *cxx_method_decl = nullptr; - clang::DeclarationName decl_name(&getASTContext()->Idents.get(name)); + clang::DeclarationName decl_name(&getASTContext().Idents.get(name)); const clang::FunctionType *function_type = llvm::dyn_cast<clang::FunctionType>(method_qual_type.getTypePtr()); @@ -7325,20 +7312,20 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( : clang::ExplicitSpecKind::ResolvedFalse); if (name[0] == '~') { cxx_dtor_decl = clang::CXXDestructorDecl::Create( - *getASTContext(), cxx_record_decl, clang::SourceLocation(), + getASTContext(), cxx_record_decl, clang::SourceLocation(), clang::DeclarationNameInfo( - getASTContext()->DeclarationNames.getCXXDestructorName( - getASTContext()->getCanonicalType(record_qual_type)), + getASTContext().DeclarationNames.getCXXDestructorName( + getASTContext().getCanonicalType(record_qual_type)), clang::SourceLocation()), method_qual_type, nullptr, is_inline, is_artificial, - ConstexprSpecKind::CSK_unspecified); + ConstexprSpecKind::CSK_unspecified); cxx_method_decl = cxx_dtor_decl; } else if (decl_name == cxx_record_decl->getDeclName()) { cxx_ctor_decl = clang::CXXConstructorDecl::Create( - *getASTContext(), cxx_record_decl, clang::SourceLocation(), + getASTContext(), cxx_record_decl, clang::SourceLocation(), clang::DeclarationNameInfo( - getASTContext()->DeclarationNames.getCXXConstructorName( - getASTContext()->getCanonicalType(record_qual_type)), + getASTContext().DeclarationNames.getCXXConstructorName( + getASTContext().getCanonicalType(record_qual_type)), clang::SourceLocation()), method_qual_type, nullptr, // TypeSourceInfo * @@ -7359,9 +7346,9 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( is_method, op_kind, num_params)) return nullptr; cxx_method_decl = clang::CXXMethodDecl::Create( - *getASTContext(), cxx_record_decl, clang::SourceLocation(), + getASTContext(), cxx_record_decl, clang::SourceLocation(), clang::DeclarationNameInfo( - getASTContext()->DeclarationNames.getCXXOperatorName(op_kind), + getASTContext().DeclarationNames.getCXXOperatorName(op_kind), clang::SourceLocation()), method_qual_type, nullptr, // TypeSourceInfo * @@ -7369,22 +7356,21 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( } else if (num_params == 0) { // Conversion operators don't take params... cxx_method_decl = clang::CXXConversionDecl::Create( - *getASTContext(), cxx_record_decl, clang::SourceLocation(), + getASTContext(), cxx_record_decl, clang::SourceLocation(), clang::DeclarationNameInfo( - getASTContext()->DeclarationNames.getCXXConversionFunctionName( - getASTContext()->getCanonicalType( + getASTContext().DeclarationNames.getCXXConversionFunctionName( + getASTContext().getCanonicalType( function_type->getReturnType())), clang::SourceLocation()), method_qual_type, nullptr, // TypeSourceInfo * - is_inline, explicit_spec, CSK_unspecified, - clang::SourceLocation()); + is_inline, explicit_spec, CSK_unspecified, clang::SourceLocation()); } } if (cxx_method_decl == nullptr) { cxx_method_decl = clang::CXXMethodDecl::Create( - *getASTContext(), cxx_record_decl, clang::SourceLocation(), + getASTContext(), cxx_record_decl, clang::SourceLocation(), clang::DeclarationNameInfo(decl_name, clang::SourceLocation()), method_qual_type, nullptr, // TypeSourceInfo * @@ -7399,11 +7385,11 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( cxx_method_decl->setVirtualAsWritten(is_virtual); if (is_attr_used) - cxx_method_decl->addAttr(clang::UsedAttr::CreateImplicit(*getASTContext())); + cxx_method_decl->addAttr(clang::UsedAttr::CreateImplicit(getASTContext())); if (mangled_name != nullptr) { cxx_method_decl->addAttr(clang::AsmLabelAttr::CreateImplicit( - *getASTContext(), mangled_name, /*literal=*/false)); + getASTContext(), mangled_name, /*literal=*/false)); } // Populate the method decl with parameter decls @@ -7412,7 +7398,7 @@ clang::CXXMethodDecl *ClangASTContext::AddMethodToCXXRecordType( for (unsigned param_index = 0; param_index < num_params; ++param_index) { params.push_back(clang::ParmVarDecl::Create( - *getASTContext(), cxx_method_decl, clang::SourceLocation(), + getASTContext(), cxx_method_decl, clang::SourceLocation(), clang::SourceLocation(), nullptr, // anonymous method_function_prototype->getParamType(param_index), nullptr, @@ -7479,7 +7465,7 @@ ClangASTContext::CreateBaseClassSpecifier(lldb::opaque_compiler_type_t type, return std::make_unique<clang::CXXBaseSpecifier>( clang::SourceRange(), is_virtual, base_of_class, ClangASTContext::ConvertAccessTypeToAccessSpecifier(access), - getASTContext()->getTrivialTypeSourceInfo(GetQualType(type)), + getASTContext().getTrivialTypeSourceInfo(GetQualType(type)), clang::SourceLocation()); } @@ -7508,7 +7494,7 @@ bool ClangASTContext::SetObjCSuperClass( llvm::dyn_cast_or_null<ClangASTContext>(type.GetTypeSystem()); if (!ast) return false; - clang::ASTContext *clang_ast = ast->getASTContext(); + clang::ASTContext &clang_ast = ast->getASTContext(); if (type && superclass_clang_type.IsValid() && superclass_clang_type.GetTypeSystem() == type.GetTypeSystem()) { @@ -7517,8 +7503,8 @@ bool ClangASTContext::SetObjCSuperClass( clang::ObjCInterfaceDecl *super_interface_decl = GetAsObjCInterfaceDecl(superclass_clang_type); if (class_interface_decl && super_interface_decl) { - class_interface_decl->setSuperClass(clang_ast->getTrivialTypeSourceInfo( - clang_ast->getObjCInterfaceType(super_interface_decl))); + class_interface_decl->setSuperClass(clang_ast.getTrivialTypeSourceInfo( + clang_ast.getObjCInterfaceType(super_interface_decl))); return true; } } @@ -7536,7 +7522,7 @@ bool ClangASTContext::AddObjCClassProperty( ClangASTContext *ast = llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem()); if (!ast) return false; - clang::ASTContext *clang_ast = ast->getASTContext(); + clang::ASTContext &clang_ast = ast->getASTContext(); clang::ObjCInterfaceDecl *class_interface_decl = GetAsObjCInterfaceDecl(type); if (!class_interface_decl) @@ -7555,16 +7541,15 @@ bool ClangASTContext::AddObjCClassProperty( clang::TypeSourceInfo *prop_type_source; if (ivar_decl) - prop_type_source = - clang_ast->getTrivialTypeSourceInfo(ivar_decl->getType()); + prop_type_source = clang_ast.getTrivialTypeSourceInfo(ivar_decl->getType()); else - prop_type_source = clang_ast->getTrivialTypeSourceInfo( + prop_type_source = clang_ast.getTrivialTypeSourceInfo( ClangUtil::GetQualType(property_clang_type)); clang::ObjCPropertyDecl *property_decl = clang::ObjCPropertyDecl::Create( - *clang_ast, class_interface_decl, + clang_ast, class_interface_decl, clang::SourceLocation(), // Source Location - &clang_ast->Idents.get(property_name), + &clang_ast.Idents.get(property_name), clang::SourceLocation(), // Source Location for AT clang::SourceLocation(), // Source location for ( ivar_decl ? ivar_decl->getType() @@ -7585,26 +7570,26 @@ bool ClangASTContext::AddObjCClassProperty( std::string property_setter_no_colon(property_setter_name, strlen(property_setter_name) - 1); clang::IdentifierInfo *setter_ident = - &clang_ast->Idents.get(property_setter_no_colon); - setter_sel = clang_ast->Selectors.getSelector(1, &setter_ident); + &clang_ast.Idents.get(property_setter_no_colon); + setter_sel = clang_ast.Selectors.getSelector(1, &setter_ident); } else if (!(property_attributes & DW_APPLE_PROPERTY_readonly)) { std::string setter_sel_string("set"); setter_sel_string.push_back(::toupper(property_name[0])); setter_sel_string.append(&property_name[1]); clang::IdentifierInfo *setter_ident = - &clang_ast->Idents.get(setter_sel_string); - setter_sel = clang_ast->Selectors.getSelector(1, &setter_ident); + &clang_ast.Idents.get(setter_sel_string); + setter_sel = clang_ast.Selectors.getSelector(1, &setter_ident); } property_decl->setSetterName(setter_sel); property_decl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_setter); if (property_getter_name != nullptr) { clang::IdentifierInfo *getter_ident = - &clang_ast->Idents.get(property_getter_name); - getter_sel = clang_ast->Selectors.getSelector(0, &getter_ident); + &clang_ast.Idents.get(property_getter_name); + getter_sel = clang_ast.Selectors.getSelector(0, &getter_ident); } else { - clang::IdentifierInfo *getter_ident = &clang_ast->Idents.get(property_name); - getter_sel = clang_ast->Selectors.getSelector(0, &getter_ident); + clang::IdentifierInfo *getter_ident = &clang_ast.Idents.get(property_name); + getter_sel = clang_ast.Selectors.getSelector(0, &getter_ident); } property_decl->setGetterName(getter_sel); property_decl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_getter); @@ -7650,18 +7635,17 @@ bool ClangASTContext::AddObjCClassProperty( const bool HasRelatedResultType = false; getter = clang::ObjCMethodDecl::Create( - *clang_ast, clang::SourceLocation(), clang::SourceLocation(), - getter_sel, ClangUtil::GetQualType(property_clang_type_to_access), - nullptr, class_interface_decl, isInstance, isVariadic, - isPropertyAccessor, isSynthesizedAccessorStub, isImplicitlyDeclared, - isDefined, impControl, HasRelatedResultType); + clang_ast, clang::SourceLocation(), clang::SourceLocation(), getter_sel, + ClangUtil::GetQualType(property_clang_type_to_access), nullptr, + class_interface_decl, isInstance, isVariadic, isPropertyAccessor, + isSynthesizedAccessorStub, isImplicitlyDeclared, isDefined, impControl, + HasRelatedResultType); if (getter) { if (metadata) ast->SetMetadata(getter, *metadata); - getter->setMethodParams(*clang_ast, - llvm::ArrayRef<clang::ParmVarDecl *>(), + getter->setMethodParams(clang_ast, llvm::ArrayRef<clang::ParmVarDecl *>(), llvm::ArrayRef<clang::SourceLocation>()); class_interface_decl->addDecl(getter); } @@ -7675,7 +7659,7 @@ bool ClangASTContext::AddObjCClassProperty( setter = isInstance ? class_interface_decl->lookupInstanceMethod(setter_sel) : class_interface_decl->lookupClassMethod(setter_sel); if (!setter_sel.isNull() && !setter) { - clang::QualType result_type = clang_ast->VoidTy; + clang::QualType result_type = clang_ast.VoidTy; const bool isVariadic = false; const bool isPropertyAccessor = true; const bool isSynthesizedAccessorStub = false; @@ -7686,10 +7670,10 @@ bool ClangASTContext::AddObjCClassProperty( const bool HasRelatedResultType = false; setter = clang::ObjCMethodDecl::Create( - *clang_ast, clang::SourceLocation(), clang::SourceLocation(), - setter_sel, result_type, nullptr, class_interface_decl, isInstance, - isVariadic, isPropertyAccessor, isSynthesizedAccessorStub, - isImplicitlyDeclared, isDefined, impControl, HasRelatedResultType); + clang_ast, clang::SourceLocation(), clang::SourceLocation(), setter_sel, + result_type, nullptr, class_interface_decl, isInstance, isVariadic, + isPropertyAccessor, isSynthesizedAccessorStub, isImplicitlyDeclared, + isDefined, impControl, HasRelatedResultType); if (setter) { if (metadata) @@ -7697,12 +7681,12 @@ bool ClangASTContext::AddObjCClassProperty( llvm::SmallVector<clang::ParmVarDecl *, 1> params; params.push_back(clang::ParmVarDecl::Create( - *clang_ast, setter, clang::SourceLocation(), clang::SourceLocation(), + clang_ast, setter, clang::SourceLocation(), clang::SourceLocation(), nullptr, // anonymous ClangUtil::GetQualType(property_clang_type_to_access), nullptr, clang::SC_Auto, nullptr)); - setter->setMethodParams(*clang_ast, + setter->setMethodParams(clang_ast, llvm::ArrayRef<clang::ParmVarDecl *>(params), llvm::ArrayRef<clang::SourceLocation>()); @@ -7743,7 +7727,7 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem()); if (lldb_ast == nullptr) return nullptr; - clang::ASTContext *ast = lldb_ast->getASTContext(); + clang::ASTContext &ast = lldb_ast->getASTContext(); const char *selector_start = ::strchr(name, ' '); if (selector_start == nullptr) @@ -7763,7 +7747,7 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( bool has_arg = (start[len] == ':'); if (has_arg) ++num_selectors_with_args; - selector_idents.push_back(&ast->Idents.get(llvm::StringRef(start, len))); + selector_idents.push_back(&ast.Idents.get(llvm::StringRef(start, len))); if (has_arg) len += 1; } @@ -7771,7 +7755,7 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( if (selector_idents.size() == 0) return nullptr; - clang::Selector method_selector = ast->Selectors.getSelector( + clang::Selector method_selector = ast.Selectors.getSelector( num_selectors_with_args ? selector_idents.size() : 0, selector_idents.data()); @@ -7807,12 +7791,12 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( // deal with it. clang::ObjCMethodDecl *objc_method_decl = clang::ObjCMethodDecl::Create( - *ast, + ast, clang::SourceLocation(), // beginLoc, clang::SourceLocation(), // endLoc, method_selector, method_function_prototype->getReturnType(), nullptr, // TypeSourceInfo *ResultTInfo, - ClangASTContext::GetASTContext(ast)->GetDeclContextForType( + ClangASTContext::GetASTContext(&ast)->GetDeclContextForType( ClangUtil::GetQualType(type)), isInstance, isVariadic, isPropertyAccessor, isSynthesizedAccessorStub, isImplicitlyDeclared, isDefined, impControl, HasRelatedResultType); @@ -7825,7 +7809,7 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( for (unsigned param_index = 0; param_index < num_args; ++param_index) { params.push_back(clang::ParmVarDecl::Create( - *ast, objc_method_decl, clang::SourceLocation(), + ast, objc_method_decl, clang::SourceLocation(), clang::SourceLocation(), nullptr, // anonymous method_function_prototype->getParamType(param_index), nullptr, @@ -7833,7 +7817,7 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( } objc_method_decl->setMethodParams( - *ast, llvm::ArrayRef<clang::ParmVarDecl *>(params), + ast, llvm::ArrayRef<clang::ParmVarDecl *>(params), llvm::ArrayRef<clang::SourceLocation>()); } @@ -7841,12 +7825,12 @@ clang::ObjCMethodDecl *ClangASTContext::AddMethodToObjCObjectType( // Add a the objc_direct attribute to the declaration we generate that // we generate a direct method call for this ObjCMethodDecl. objc_method_decl->addAttr( - clang::ObjCDirectAttr::CreateImplicit(*ast, SourceLocation())); + clang::ObjCDirectAttr::CreateImplicit(ast, SourceLocation())); // Usually Sema is creating implicit parameters (e.g., self) when it // parses the method. We don't have a parsing Sema when we build our own // AST here so we manually need to create these implicit parameters to // make the direct call code generation happy. - objc_method_decl->createImplicitParams(*ast, class_interface_decl); + objc_method_decl->createImplicitParams(ast, class_interface_decl); } class_interface_decl->addDecl(objc_method_decl); @@ -7972,7 +7956,7 @@ bool ClangASTContext::CompleteTagDeclarationDefinition( llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem()); if (lldb_ast == nullptr) return false; - clang::ASTContext *ast = lldb_ast->getASTContext(); + clang::ASTContext &ast = lldb_ast->getASTContext(); /// TODO This really needs to be fixed. @@ -7984,12 +7968,12 @@ bool ClangASTContext::CompleteTagDeclarationDefinition( clang::QualType promotion_qual_type; // If the enum integer type is less than an integer in bit width, // then we must promote it to an integer size. - if (ast->getTypeSize(enum_decl->getIntegerType()) < - ast->getTypeSize(ast->IntTy)) { + if (ast.getTypeSize(enum_decl->getIntegerType()) < + ast.getTypeSize(ast.IntTy)) { if (enum_decl->getIntegerType()->isSignedIntegerType()) - promotion_qual_type = ast->IntTy; + promotion_qual_type = ast.IntTy; else - promotion_qual_type = ast->UnsignedIntTy; + promotion_qual_type = ast.UnsignedIntTy; } else promotion_qual_type = enum_decl->getIntegerType(); @@ -8034,8 +8018,8 @@ clang::EnumConstantDecl *ClangASTContext::AddEnumerationValueToEnumerationType( return nullptr; clang::EnumConstantDecl *enumerator_decl = clang::EnumConstantDecl::Create( - *getASTContext(), enutype->getDecl(), clang::SourceLocation(), - name ? &getASTContext()->Idents.get(name) : nullptr, // Identifier + getASTContext(), enutype->getDecl(), clang::SourceLocation(), + name ? &getASTContext().Idents.get(name) : nullptr, // Identifier clang::QualType(enutype, 0), nullptr, value); if (!enumerator_decl) @@ -8090,7 +8074,7 @@ ClangASTContext::CreateMemberPointerType(const CompilerType &type, if (!ast) return CompilerType(); return CompilerType(ast, ast->getASTContext() - ->getMemberPointerType( + .getMemberPointerType( ClangUtil::GetQualType(pointee_type), ClangUtil::GetQualType(type).getTypePtr()) .getAsOpaquePtr()); @@ -8176,7 +8160,7 @@ void ClangASTContext::DumpValue( uint32_t field_bit_offset = 0; uint32_t field_byte_offset = 0; const clang::ASTRecordLayout &record_layout = - getASTContext()->getASTRecordLayout(record_decl); + getASTContext().getASTRecordLayout(record_decl); uint32_t child_idx = 0; const clang::CXXRecordDecl *cxx_record_decl = @@ -8220,7 +8204,7 @@ void ClangASTContext::DumpValue( base_class_type_name); clang::TypeInfo base_class_type_info = - getASTContext()->getTypeInfo(base_class_qual_type); + getASTContext().getTypeInfo(base_class_qual_type); // Dump the value of the member CompilerType base_clang_type(this, @@ -8267,7 +8251,7 @@ void ClangASTContext::DumpValue( // Figure out the type byte size (field_type_info.first) and alignment // (field_type_info.second) from the AST context. clang::TypeInfo field_type_info = - getASTContext()->getTypeInfo(field_type); + getASTContext().getTypeInfo(field_type); assert(field_idx < record_layout.getFieldCount()); // Figure out the field offset within the current struct/union/class // type @@ -8355,7 +8339,7 @@ void ClangASTContext::DumpValue( const uint64_t element_count = array->getSize().getLimitedValue(); clang::TypeInfo field_type_info = - getASTContext()->getTypeInfo(element_qual_type); + getASTContext().getTypeInfo(element_qual_type); uint32_t element_idx = 0; uint32_t element_offset = 0; @@ -8424,7 +8408,7 @@ void ClangASTContext::DumpValue( CompilerType typedef_clang_type(this, typedef_qual_type.getAsOpaquePtr()); lldb::Format typedef_format = typedef_clang_type.GetFormat(); clang::TypeInfo typedef_type_info = - getASTContext()->getTypeInfo(typedef_qual_type); + getASTContext().getTypeInfo(typedef_qual_type); uint64_t typedef_byte_size = typedef_type_info.Width / 8; return typedef_clang_type.DumpValue( @@ -8450,7 +8434,7 @@ void ClangASTContext::DumpValue( elaborated_qual_type.getAsOpaquePtr()); lldb::Format elaborated_format = elaborated_clang_type.GetFormat(); clang::TypeInfo elaborated_type_info = - getASTContext()->getTypeInfo(elaborated_qual_type); + getASTContext().getTypeInfo(elaborated_qual_type); uint64_t elaborated_byte_size = elaborated_type_info.Width / 8; return elaborated_clang_type.DumpValue( @@ -8476,7 +8460,7 @@ void ClangASTContext::DumpValue( elaborated_qual_type.getAsOpaquePtr()); lldb::Format elaborated_format = elaborated_clang_type.GetFormat(); clang::TypeInfo elaborated_type_info = - getASTContext()->getTypeInfo(elaborated_qual_type); + getASTContext().getTypeInfo(elaborated_qual_type); uint64_t elaborated_byte_size = elaborated_type_info.Width / 8; return elaborated_clang_type.DumpValue( @@ -8502,7 +8486,7 @@ void ClangASTContext::DumpValue( lldb::Format desugar_format = desugar_clang_type.GetFormat(); clang::TypeInfo desugar_type_info = - getASTContext()->getTypeInfo(desugar_qual_type); + getASTContext().getTypeInfo(desugar_qual_type); uint64_t desugar_byte_size = desugar_type_info.Width / 8; return desugar_clang_type.DumpValue( @@ -8643,7 +8627,7 @@ bool ClangASTContext::DumpTypeValue( if (format == eFormatDefault) format = typedef_clang_type.GetFormat(); clang::TypeInfo typedef_type_info = - getASTContext()->getTypeInfo(typedef_qual_type); + getASTContext().getTypeInfo(typedef_qual_type); uint64_t typedef_byte_size = typedef_type_info.Width / 8; return typedef_clang_type.DumpTypeValue( @@ -8788,7 +8772,7 @@ void ClangASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type) { CompilerType ct(this, type); const clang::Type *clang_type = ClangUtil::GetQualType(ct).getTypePtr(); ClangASTMetadata *metadata = - ClangASTContext::GetMetadata(getASTContext(), clang_type); + ClangASTContext::GetMetadata(&getASTContext(), clang_type); if (metadata) { metadata->Dump(&s); } @@ -8816,7 +8800,7 @@ void ClangASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type, clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface(); if (class_interface_decl) { - clang::PrintingPolicy policy = getASTContext()->getPrintingPolicy(); + clang::PrintingPolicy policy = getASTContext().getPrintingPolicy(); class_interface_decl->print(llvm_ostrm, policy, s->GetIndentLevel()); } } @@ -8846,10 +8830,10 @@ void ClangASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type, llvm::dyn_cast<clang::CXXRecordDecl>(record_decl); if (cxx_record_decl) - cxx_record_decl->print(llvm_ostrm, getASTContext()->getPrintingPolicy(), + cxx_record_decl->print(llvm_ostrm, getASTContext().getPrintingPolicy(), s->GetIndentLevel()); else - record_decl->print(llvm_ostrm, getASTContext()->getPrintingPolicy(), + record_decl->print(llvm_ostrm, getASTContext().getPrintingPolicy(), s->GetIndentLevel()); } break; @@ -9428,7 +9412,7 @@ ClangASTContext::DeclContextGetClangASTContext(const CompilerDeclContext &dc) { ClangASTContext *ast = llvm::dyn_cast_or_null<ClangASTContext>(dc.GetTypeSystem()); if (ast) - return ast->getASTContext(); + return &ast->getASTContext(); return nullptr; } diff --git a/lldb/source/Symbol/ClangASTImporter.cpp b/lldb/source/Symbol/ClangASTImporter.cpp index 7bdbe2bcc1d..2f1b350d96e 100644 --- a/lldb/source/Symbol/ClangASTImporter.cpp +++ b/lldb/source/Symbol/ClangASTImporter.cpp @@ -27,26 +27,22 @@ using namespace clang; CompilerType ClangASTImporter::CopyType(ClangASTContext &dst_ast, const CompilerType &src_type) { - clang::ASTContext *dst_clang_ast = dst_ast.getASTContext(); - if (!dst_clang_ast) - return CompilerType(); + clang::ASTContext &dst_clang_ast = dst_ast.getASTContext(); ClangASTContext *src_ast = llvm::dyn_cast_or_null<ClangASTContext>(src_type.GetTypeSystem()); if (!src_ast) return CompilerType(); - clang::ASTContext *src_clang_ast = src_ast->getASTContext(); - if (!src_clang_ast) - return CompilerType(); + clang::ASTContext &src_clang_ast = src_ast->getASTContext(); clang::QualType src_qual_type = ClangUtil::GetQualType(src_type); - ImporterDelegateSP delegate_sp(GetDelegate(dst_clang_ast, src_clang_ast)); + ImporterDelegateSP delegate_sp(GetDelegate(&dst_clang_ast, &src_clang_ast)); if (!delegate_sp) return CompilerType(); - ASTImporterDelegate::CxxModuleScope std_scope(*delegate_sp, dst_clang_ast); + ASTImporterDelegate::CxxModuleScope std_scope(*delegate_sp, &dst_clang_ast); llvm::Expected<QualType> ret_or_error = delegate_sp->Import(src_qual_type); if (!ret_or_error) { @@ -307,15 +303,15 @@ CompilerType ClangASTImporter::DeportType(ClangASTContext &dst, " [ClangASTImporter] DeportType called on ({0}Type*){1:x} " "from (ASTContext*){2:x} to (ASTContext*){3:x}", src_type.GetTypeName(), src_type.GetOpaqueQualType(), - src_ctxt->getASTContext(), dst.getASTContext()); + &src_ctxt->getASTContext(), &dst.getASTContext()); DeclContextOverride decl_context_override; if (auto *t = ClangUtil::GetQualType(src_type)->getAs<TagType>()) decl_context_override.OverrideAllDeclsFromContainingFunction(t->getDecl()); - CompleteTagDeclsScope complete_scope(*this, dst.getASTContext(), - src_ctxt->getASTContext()); + CompleteTagDeclsScope complete_scope(*this, &dst.getASTContext(), + &src_ctxt->getASTContext()); return CopyType(dst, src_type); } diff --git a/lldb/tools/lldb-test/lldb-test.cpp b/lldb/tools/lldb-test/lldb-test.cpp index 12e4a560597..66c9a87301e 100644 --- a/lldb/tools/lldb-test/lldb-test.cpp +++ b/lldb/tools/lldb-test/lldb-test.cpp @@ -603,11 +603,9 @@ Error opts::symbols::dumpAST(lldb_private::Module &Module) { if (!clang_ast_ctx) return make_string_error("Retrieved TypeSystem was not a ClangASTContext"); - auto ast_ctx = clang_ast_ctx->getASTContext(); - if (!ast_ctx) - return make_string_error("Can't retrieve AST context."); + clang::ASTContext &ast_ctx = clang_ast_ctx->getASTContext(); - clang::TranslationUnitDecl *tu = ast_ctx->getTranslationUnitDecl(); + clang::TranslationUnitDecl *tu = ast_ctx.getTranslationUnitDecl(); if (!tu) return make_string_error("Can't retrieve translation unit declaration."); diff --git a/lldb/unittests/Expression/ClangExpressionDeclMapTest.cpp b/lldb/unittests/Expression/ClangExpressionDeclMapTest.cpp index 12ba5fc1592..299c41f1d33 100644 --- a/lldb/unittests/Expression/ClangExpressionDeclMapTest.cpp +++ b/lldb/unittests/Expression/ClangExpressionDeclMapTest.cpp @@ -33,7 +33,7 @@ struct FakeClangExpressionDeclMap : public ClangExpressionDeclMap { // persistent declaration and must be inside the scratch AST context. assert(d); assert(d->getName().startswith("$")); - assert(&d->getASTContext() == m_scratch_context->getASTContext()); + assert(&d->getASTContext() == &m_scratch_context->getASTContext()); m_persistent_decls[d->getName()] = d; } diff --git a/lldb/unittests/Symbol/TestClangASTContext.cpp b/lldb/unittests/Symbol/TestClangASTContext.cpp index 4c9e4d75efd..9cdcf323429 100644 --- a/lldb/unittests/Symbol/TestClangASTContext.cpp +++ b/lldb/unittests/Symbol/TestClangASTContext.cpp @@ -52,67 +52,66 @@ protected: }; TEST_F(TestClangASTContext, TestGetBasicTypeFromEnum) { - clang::ASTContext *context = m_ast->getASTContext(); + clang::ASTContext &context = m_ast->getASTContext(); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeBool), context->BoolTy)); + context.hasSameType(GetBasicQualType(eBasicTypeBool), context.BoolTy)); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeChar), context->CharTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeChar16), - context->Char16Ty)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeChar32), - context->Char32Ty)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeDouble), - context->DoubleTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeDoubleComplex), - context->DoubleComplexTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeFloat), - context->FloatTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeFloatComplex), - context->FloatComplexTy)); + context.hasSameType(GetBasicQualType(eBasicTypeChar), context.CharTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeChar16), + context.Char16Ty)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeChar32), + context.Char32Ty)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeDouble), + context.DoubleTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeDoubleComplex), + context.DoubleComplexTy)); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeHalf), context->HalfTy)); + context.hasSameType(GetBasicQualType(eBasicTypeFloat), context.FloatTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeFloatComplex), + context.FloatComplexTy)); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeInt), context->IntTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeInt128), - context->Int128Ty)); + context.hasSameType(GetBasicQualType(eBasicTypeHalf), context.HalfTy)); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeLong), context->LongTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeLongDouble), - context->LongDoubleTy)); + context.hasSameType(GetBasicQualType(eBasicTypeInt), context.IntTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeInt128), + context.Int128Ty)); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeLongDoubleComplex), - context->LongDoubleComplexTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeLongLong), - context->LongLongTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeNullPtr), - context->NullPtrTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeObjCClass), - context->getObjCClassType())); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeObjCID), - context->getObjCIdType())); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeObjCSel), - context->getObjCSelType())); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeShort), - context->ShortTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeSignedChar), - context->SignedCharTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedChar), - context->UnsignedCharTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedInt), - context->UnsignedIntTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedInt128), - context->UnsignedInt128Ty)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedLong), - context->UnsignedLongTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedLongLong), - context->UnsignedLongLongTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeUnsignedShort), - context->UnsignedShortTy)); + context.hasSameType(GetBasicQualType(eBasicTypeLong), context.LongTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeLongDouble), + context.LongDoubleTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeLongDoubleComplex), + context.LongDoubleComplexTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeLongLong), + context.LongLongTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeNullPtr), + context.NullPtrTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeObjCClass), + context.getObjCClassType())); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeObjCID), + context.getObjCIdType())); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeObjCSel), + context.getObjCSelType())); EXPECT_TRUE( - context->hasSameType(GetBasicQualType(eBasicTypeVoid), context->VoidTy)); - EXPECT_TRUE(context->hasSameType(GetBasicQualType(eBasicTypeWChar), - context->WCharTy)); + context.hasSameType(GetBasicQualType(eBasicTypeShort), context.ShortTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeSignedChar), + context.SignedCharTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedChar), + context.UnsignedCharTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedInt), + context.UnsignedIntTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedInt128), + context.UnsignedInt128Ty)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedLong), + context.UnsignedLongTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedLongLong), + context.UnsignedLongLongTy)); + EXPECT_TRUE(context.hasSameType(GetBasicQualType(eBasicTypeUnsignedShort), + context.UnsignedShortTy)); + EXPECT_TRUE( + context.hasSameType(GetBasicQualType(eBasicTypeVoid), context.VoidTy)); + EXPECT_TRUE( + context.hasSameType(GetBasicQualType(eBasicTypeWChar), context.WCharTy)); } TEST_F(TestClangASTContext, TestGetBasicTypeFromName) { @@ -168,7 +167,7 @@ TEST_F(TestClangASTContext, TestGetBasicTypeFromName) { void VerifyEncodingAndBitSize(ClangASTContext &clang_context, lldb::Encoding encoding, unsigned int bit_size) { - clang::ASTContext *context = clang_context.getASTContext(); + clang::ASTContext &context = clang_context.getASTContext(); CompilerType type = clang_context.GetBuiltinTypeForEncodingAndBitSize(encoding, bit_size); @@ -179,7 +178,7 @@ void VerifyEncodingAndBitSize(ClangASTContext &clang_context, if (qtype.isNull()) return; - uint64_t actual_size = context->getTypeSize(qtype); + uint64_t actual_size = context.getTypeSize(qtype); EXPECT_EQ(bit_size, actual_size); const clang::Type *type_ptr = qtype.getTypePtr(); @@ -229,9 +228,9 @@ TEST_F(TestClangASTContext, TestBuiltinTypeForEncodingAndBitSize) { } TEST_F(TestClangASTContext, TestIsClangType) { - clang::ASTContext *context = m_ast->getASTContext(); + clang::ASTContext &context = m_ast->getASTContext(); lldb::opaque_compiler_type_t bool_ctype = - ClangASTContext::GetOpaqueCompilerType(context, lldb::eBasicTypeBool); + ClangASTContext::GetOpaqueCompilerType(&context, lldb::eBasicTypeBool); CompilerType bool_type(m_ast.get(), bool_ctype); CompilerType record_type = m_ast->CreateRecordType( nullptr, lldb::eAccessPublic, "FooRecord", clang::TTK_Struct, @@ -392,11 +391,11 @@ TEST_F(TestClangASTContext, TestRecordHasFields) { TEST_F(TestClangASTContext, TemplateArguments) { ClangASTContext::TemplateParameterInfos infos; infos.names.push_back("T"); - infos.args.push_back(TemplateArgument(m_ast->getASTContext()->IntTy)); + infos.args.push_back(TemplateArgument(m_ast->getASTContext().IntTy)); infos.names.push_back("I"); llvm::APSInt arg(llvm::APInt(8, 47)); - infos.args.push_back(TemplateArgument(*m_ast->getASTContext(), arg, - m_ast->getASTContext()->IntTy)); + infos.args.push_back(TemplateArgument(m_ast->getASTContext(), arg, + m_ast->getASTContext().IntTy)); // template<typename T, int I> struct foo; ClassTemplateDecl *decl = m_ast->CreateClassTemplateDecl( @@ -421,11 +420,12 @@ TEST_F(TestClangASTContext, TemplateArguments) { CompilerType auto_type( m_ast.get(), m_ast->getASTContext() - ->getAutoType(ClangUtil::GetCanonicalQualType(typedef_type), - clang::AutoTypeKeyword::Auto, false) + .getAutoType(ClangUtil::GetCanonicalQualType(typedef_type), + clang::AutoTypeKeyword::Auto, false) .getAsOpaquePtr()); - CompilerType int_type(m_ast.get(), m_ast->getASTContext()->IntTy.getAsOpaquePtr()); + CompilerType int_type(m_ast.get(), + m_ast->getASTContext().IntTy.getAsOpaquePtr()); for (CompilerType t : {type, typedef_type, auto_type}) { SCOPED_TRACE(t.GetTypeName().AsCString()); @@ -454,27 +454,27 @@ static QualType makeConstInt(clang::ASTContext &ctxt) { } TEST_F(TestClangASTContext, TestGetTypeClassDeclType) { - clang::ASTContext &ctxt = *m_ast->getASTContext(); + clang::ASTContext &ctxt = m_ast->getASTContext(); auto *nullptr_expr = new (ctxt) CXXNullPtrLiteralExpr(ctxt.NullPtrTy, SourceLocation()); QualType t = ctxt.getDecltypeType(nullptr_expr, makeConstInt(ctxt)); EXPECT_EQ(lldb::eTypeClassBuiltin, m_ast->GetTypeClass(t.getAsOpaquePtr())); } TEST_F(TestClangASTContext, TestGetTypeClassTypeOf) { - clang::ASTContext &ctxt = *m_ast->getASTContext(); + clang::ASTContext &ctxt = m_ast->getASTContext(); QualType t = ctxt.getTypeOfType(makeConstInt(ctxt)); EXPECT_EQ(lldb::eTypeClassBuiltin, m_ast->GetTypeClass(t.getAsOpaquePtr())); } TEST_F(TestClangASTContext, TestGetTypeClassTypeOfExpr) { - clang::ASTContext &ctxt = *m_ast->getASTContext(); + clang::ASTContext &ctxt = m_ast->getASTContext(); auto *nullptr_expr = new (ctxt) CXXNullPtrLiteralExpr(ctxt.NullPtrTy, SourceLocation()); QualType t = ctxt.getTypeOfExprType(nullptr_expr); EXPECT_EQ(lldb::eTypeClassBuiltin, m_ast->GetTypeClass(t.getAsOpaquePtr())); } TEST_F(TestClangASTContext, TestGetTypeClassNested) { - clang::ASTContext &ctxt = *m_ast->getASTContext(); + clang::ASTContext &ctxt = m_ast->getASTContext(); QualType t_base = ctxt.getTypeOfType(makeConstInt(ctxt)); QualType t = ctxt.getTypeOfType(t_base); EXPECT_EQ(lldb::eTypeClassBuiltin, m_ast->GetTypeClass(t.getAsOpaquePtr())); diff --git a/lldb/unittests/Symbol/TestClangASTImporter.cpp b/lldb/unittests/Symbol/TestClangASTImporter.cpp index 9a03f854db1..09e756572b4 100644 --- a/lldb/unittests/Symbol/TestClangASTImporter.cpp +++ b/lldb/unittests/Symbol/TestClangASTImporter.cpp @@ -53,7 +53,7 @@ TEST_F(TestClangASTImporter, CopyDeclTagDecl) { ClangASTImporter importer; clang::Decl *imported = - importer.CopyDecl(target_ast->getASTContext(), source.record_decl); + importer.CopyDecl(&target_ast->getASTContext(), source.record_decl); ASSERT_NE(nullptr, imported); // Check that we got the correct decl by just comparing their qualified name. @@ -66,7 +66,7 @@ TEST_F(TestClangASTImporter, CopyDeclTagDecl) { // Check that origin was set for the imported declaration. ClangASTImporter::DeclOrigin origin = importer.GetDeclOrigin(imported); EXPECT_TRUE(origin.Valid()); - EXPECT_EQ(origin.ctx, source.ast->getASTContext()); + EXPECT_EQ(origin.ctx, &source.ast->getASTContext()); EXPECT_EQ(origin.decl, source.record_decl); } @@ -91,7 +91,7 @@ TEST_F(TestClangASTImporter, CopyTypeTagDecl) { ClangASTImporter::DeclOrigin origin = importer.GetDeclOrigin(imported_tag_decl); EXPECT_TRUE(origin.Valid()); - EXPECT_EQ(origin.ctx, source.ast->getASTContext()); + EXPECT_EQ(origin.ctx, &source.ast->getASTContext()); EXPECT_EQ(origin.decl, source.record_decl); } @@ -103,7 +103,7 @@ TEST_F(TestClangASTImporter, DeportDeclTagDecl) { ClangASTImporter importer; clang::Decl *imported = - importer.DeportDecl(target_ast->getASTContext(), source.record_decl); + importer.DeportDecl(&target_ast->getASTContext(), source.record_decl); ASSERT_NE(nullptr, imported); // Check that we got the correct decl by just comparing their qualified name. @@ -150,7 +150,7 @@ TEST_F(TestClangASTImporter, MetadataPropagation) { ClangASTImporter importer; clang::Decl *imported = - importer.CopyDecl(target_ast->getASTContext(), source.record_decl); + importer.CopyDecl(&target_ast->getASTContext(), source.record_decl); ASSERT_NE(nullptr, imported); // Check that we got the same Metadata. @@ -172,12 +172,12 @@ TEST_F(TestClangASTImporter, MetadataPropagationIndirectImport) { ClangASTImporter importer; clang::Decl *temporary_imported = - importer.CopyDecl(temporary_ast->getASTContext(), source.record_decl); + importer.CopyDecl(&temporary_ast->getASTContext(), source.record_decl); ASSERT_NE(nullptr, temporary_imported); std::unique_ptr<ClangASTContext> target_ast = clang_utils::createAST(); clang::Decl *imported = - importer.CopyDecl(target_ast->getASTContext(), temporary_imported); + importer.CopyDecl(&target_ast->getASTContext(), temporary_imported); ASSERT_NE(nullptr, imported); // Check that we got the same Metadata. @@ -196,7 +196,7 @@ TEST_F(TestClangASTImporter, MetadataPropagationAfterCopying) { ClangASTImporter importer; clang::Decl *imported = - importer.CopyDecl(target_ast->getASTContext(), source.record_decl); + importer.CopyDecl(&target_ast->getASTContext(), source.record_decl); ASSERT_NE(nullptr, imported); // The TagDecl has been imported. Now set the metadata of the source and diff --git a/lldb/unittests/TestingSupport/Symbol/ClangTestUtils.h b/lldb/unittests/TestingSupport/Symbol/ClangTestUtils.h index f9590825e07..2c94aa5d01c 100644 --- a/lldb/unittests/TestingSupport/Symbol/ClangTestUtils.h +++ b/lldb/unittests/TestingSupport/Symbol/ClangTestUtils.h @@ -17,8 +17,8 @@ namespace lldb_private { namespace clang_utils { inline clang::DeclarationName getDeclarationName(ClangASTContext &ast, llvm::StringRef name) { - clang::IdentifierInfo &II = ast.getASTContext()->Idents.get(name); - return ast.getASTContext()->DeclarationNames.getIdentifier(&II); + clang::IdentifierInfo &II = ast.getASTContext().Idents.get(name); + return ast.getASTContext().DeclarationNames.getIdentifier(&II); } inline std::unique_ptr<ClangASTContext> createAST() { @@ -26,7 +26,7 @@ inline std::unique_ptr<ClangASTContext> createAST() { } inline CompilerType createRecord(ClangASTContext &ast, llvm::StringRef name) { - return ast.CreateRecordType(ast.getASTContext()->getTranslationUnitDecl(), + return ast.CreateRecordType(ast.getASTContext().getTranslationUnitDecl(), lldb::AccessType::eAccessPublic, name, 0, lldb::LanguageType::eLanguageTypeC); } |