diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp index 2b484db3a188..51540902e2dc 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp @@ -57,10 +57,11 @@ ClangASTSource::ClangASTSource(const lldb::TargetSP &target) } } -void ClangASTSource::InstallASTContext(clang::ASTContext &ast_context, +void ClangASTSource::InstallASTContext(ClangASTContext &clang_ast_context, clang::FileManager &file_manager, bool is_shared_context) { - m_ast_context = &ast_context; + m_ast_context = clang_ast_context.getASTContext(); + m_clang_ast_context = &clang_ast_context; m_file_manager = &file_manager; if (m_target->GetUseModernTypeLookup()) { // Configure the ExternalASTMerger. The merger needs to be able to import @@ -69,7 +70,7 @@ void ClangASTSource::InstallASTContext(clang::ASTContext &ast_context, // AST contexts. lldbassert(!m_merger_up); - clang::ExternalASTMerger::ImporterTarget target = {ast_context, + clang::ExternalASTMerger::ImporterTarget target = {*m_ast_context, file_manager}; std::vector sources; for (lldb::ModuleSP module_sp : m_target->GetImages().Modules()) { @@ -132,7 +133,7 @@ void ClangASTSource::InstallASTContext(clang::ASTContext &ast_context, m_merger_up = std::make_unique(target, sources); } else { - m_ast_importer_sp->InstallMapCompleter(&ast_context, *this); + m_ast_importer_sp->InstallMapCompleter(m_ast_context, *this); } } @@ -775,7 +776,7 @@ void ClangASTSource::FindExternalVisibleDecls(NameSearchContext &context) { } clang::Sema *ClangASTSource::getSema() { - return ClangASTContext::GetASTContext(m_ast_context)->getSema(); + return m_clang_ast_context->getSema(); } bool ClangASTSource::IgnoreName(const ConstString name, @@ -2058,8 +2059,7 @@ CompilerType ClangASTSource::GuardedCopyType(const CompilerType &src_type) { // seems to be generating bad types on occasion. return CompilerType(); - return CompilerType(ClangASTContext::GetASTContext(m_ast_context), - copied_qual_type.getAsOpaquePtr()); + return CompilerType(m_clang_ast_context, copied_qual_type.getAsOpaquePtr()); } clang::NamedDecl *NameSearchContext::AddVarDecl(const CompilerType &type) { @@ -2186,10 +2186,9 @@ clang::NamedDecl *NameSearchContext::AddGenericFunDecl() { ArrayRef(), // argument types proto_info)); - return AddFunDecl( - CompilerType(ClangASTContext::GetASTContext(m_ast_source.m_ast_context), - generic_function_type.getAsOpaquePtr()), - true); + return AddFunDecl(CompilerType(m_ast_source.m_clang_ast_context, + generic_function_type.getAsOpaquePtr()), + true); } clang::NamedDecl * diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.h index d8e784f49b10..194233e4a028 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.h @@ -57,7 +57,7 @@ public: } void MaterializeVisibleDecls(const clang::DeclContext *DC) { return; } - void InstallASTContext(clang::ASTContext &ast_context, + void InstallASTContext(ClangASTContext &ast_context, clang::FileManager &file_manager, bool is_shared_context = false); @@ -408,6 +408,8 @@ protected: const lldb::TargetSP m_target; /// The AST context requests are coming in for. clang::ASTContext *m_ast_context; + /// The ClangASTContext for m_ast_context. + ClangASTContext *m_clang_ast_context; /// The file manager paired with the AST context. clang::FileManager *m_file_manager; /// The target's AST importer. diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 4966ac1640fe..b33547529deb 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -1076,12 +1076,9 @@ void ClangExpressionDeclMap::LookupLocalVarNamespace( if (!frame_ast) return; - ClangASTContext *map_ast = ClangASTContext::GetASTContext(m_ast_context); - if (!map_ast) - return; - - clang::NamespaceDecl *namespace_decl = map_ast->GetUniqueNamespaceDeclaration( - g_lldb_local_vars_namespace_cstr, nullptr); + clang::NamespaceDecl *namespace_decl = + m_clang_ast_context->GetUniqueNamespaceDeclaration( + g_lldb_local_vars_namespace_cstr, nullptr); if (!namespace_decl) return; @@ -1724,8 +1721,7 @@ void ClangExpressionDeclMap::AddOneGenericVariable(NameSearchContext &context, TypeFromUser user_type(scratch_ast_context->GetBasicType(eBasicTypeVoid) .GetPointerType() .GetLValueReferenceType()); - ClangASTContext *own_context = ClangASTContext::GetASTContext(m_ast_context); - TypeFromParser parser_type(own_context->GetBasicType(eBasicTypeVoid) + TypeFromParser parser_type(m_clang_ast_context->GetBasicType(eBasicTypeVoid) .GetPointerType() .GetLValueReferenceType()); NamedDecl *var_decl = context.AddVarDecl(parser_type); @@ -2003,9 +1999,8 @@ void ClangExpressionDeclMap::AddThisType(NameSearchContext &context, if (copied_clang_type.IsAggregateType() && copied_clang_type.GetCompleteType()) { - ClangASTContext *own_context = - ClangASTContext::GetASTContext(m_ast_context); - CompilerType void_clang_type = own_context->GetBasicType(eBasicTypeVoid); + CompilerType void_clang_type = + m_clang_ast_context->GetBasicType(eBasicTypeVoid); CompilerType void_ptr_clang_type = void_clang_type.GetPointerType(); CompilerType method_type = ClangASTContext::CreateFunctionType( @@ -2018,12 +2013,10 @@ void ClangExpressionDeclMap::AddThisType(NameSearchContext &context, const bool is_attr_used = true; const bool is_artificial = false; - CXXMethodDecl *method_decl = - ClangASTContext::GetASTContext(m_ast_context) - ->AddMethodToCXXRecordType( - copied_clang_type.GetOpaqueQualType(), "$__lldb_expr", nullptr, - method_type, lldb::eAccessPublic, is_virtual, is_static, - is_inline, is_explicit, is_attr_used, is_artificial); + CXXMethodDecl *method_decl = m_clang_ast_context->AddMethodToCXXRecordType( + copied_clang_type.GetOpaqueQualType(), "$__lldb_expr", nullptr, + method_type, lldb::eAccessPublic, is_virtual, is_static, is_inline, + is_explicit, is_attr_used, is_artificial); LLDB_LOG(log, " CEDM::AddThisType Added function $__lldb_expr " diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp index a0f966ddd511..15b242a8b87e 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -997,7 +997,7 @@ ClangExpressionParser::ParseInternal(DiagnosticManager &diagnostic_manager, } else { ast_context.setExternalSource(ast_source); } - decl_map->InstallASTContext(ast_context, m_compiler->getFileManager()); + decl_map->InstallASTContext(*m_ast_context, m_compiler->getFileManager()); } // Check that the ASTReader is properly attached to ASTContext and Sema. diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index adb8d57a74f6..9988f0615651 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -598,7 +598,7 @@ lldb::TypeSystemSP ClangASTContext::CreateInstance(lldb::LanguageType language, new ClangASTSource(target->shared_from_this())); lldbassert(ast_sp->getFileManager()); ast_sp->m_scratch_ast_source_up->InstallASTContext( - *ast_sp->getASTContext(), *ast_sp->getFileManager(), true); + *ast_sp, *ast_sp->getFileManager(), true); llvm::IntrusiveRefCntPtr proxy_ast_source( ast_sp->m_scratch_ast_source_up->CreateProxy()); ast_sp->SetExternalSource(proxy_ast_source);