Author: teemperor Date: Mon Sep 30 01:52:16 2019 New Revision: 373193 URL: http://llvm.org/viewvc/llvm-project?rev=373193&view=rev Log: [lldb][clang][modern-type-lookup] Use ASTImporterSharedState in ExternalASTMerger
Summary: The ExternalASTMerger should use the ASTImporterSharedState. This allows it to handle std::pair in LLDB (but the rest of libc++ is still work in progress). Reviewers: martong, shafik, a.sidorin Subscribers: rnkovacs, christof, JDevlieghere, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D68140 Modified: cfe/trunk/include/clang/AST/ExternalASTMerger.h cfe/trunk/lib/AST/ExternalASTMerger.cpp Modified: cfe/trunk/include/clang/AST/ExternalASTMerger.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExternalASTMerger.h?rev=373193&r1=373192&r2=373193&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/ExternalASTMerger.h (original) +++ cfe/trunk/include/clang/AST/ExternalASTMerger.h Mon Sep 30 01:52:16 2019 @@ -14,6 +14,7 @@ #define LLVM_CLANG_AST_EXTERNALASTMERGER_H #include "clang/AST/ASTImporter.h" +#include "clang/AST/ASTImporterSharedState.h" #include "clang/AST/ExternalASTSource.h" #include "llvm/Support/raw_ostream.h" @@ -88,6 +89,11 @@ public: private: /// The target for this ExtenralASTMerger. ImporterTarget Target; + /// ExternalASTMerger has multiple ASTImporters that import into the same + /// TU. This is the shared state for all ASTImporters of this + /// ExternalASTMerger. + /// See also the CrossTranslationUnitContext that has a similar setup. + std::shared_ptr<ASTImporterSharedState> SharedState; public: ExternalASTMerger(const ImporterTarget &Target, Modified: cfe/trunk/lib/AST/ExternalASTMerger.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExternalASTMerger.cpp?rev=373193&r1=373192&r2=373193&view=diff ============================================================================== --- cfe/trunk/lib/AST/ExternalASTMerger.cpp (original) +++ cfe/trunk/lib/AST/ExternalASTMerger.cpp Mon Sep 30 01:52:16 2019 @@ -107,11 +107,13 @@ public: LazyASTImporter(ExternalASTMerger &_Parent, ASTContext &ToContext, FileManager &ToFileManager, ASTContext &FromContext, FileManager &FromFileManager, - const ExternalASTMerger::OriginMap &_FromOrigins) + const ExternalASTMerger::OriginMap &_FromOrigins, + std::shared_ptr<ASTImporterSharedState> SharedState) : ASTImporter(ToContext, ToFileManager, FromContext, FromFileManager, - /*MinimalImport=*/true), + /*MinimalImport=*/true, SharedState), Parent(_Parent), Reverse(FromContext, FromFileManager, ToContext, - ToFileManager, /*MinimalImport=*/true), FromOrigins(_FromOrigins) {} + ToFileManager, /*MinimalImport=*/true), + FromOrigins(_FromOrigins) {} /// Whenever a DeclContext is imported, ensure that ExternalASTSource's origin /// map is kept up to date. Also set the appropriate flags. @@ -314,6 +316,8 @@ void ExternalASTMerger::RecordOriginImpl ExternalASTMerger::ExternalASTMerger(const ImporterTarget &Target, llvm::ArrayRef<ImporterSource> Sources) : LogStream(&llvm::nulls()), Target(Target) { + SharedState = std::make_shared<ASTImporterSharedState>( + *Target.AST.getTranslationUnitDecl()); AddSources(Sources); } @@ -321,7 +325,7 @@ void ExternalASTMerger::AddSources(llvm: for (const ImporterSource &S : Sources) { assert(&S.AST != &Target.AST); Importers.push_back(std::make_unique<LazyASTImporter>( - *this, Target.AST, Target.FM, S.AST, S.FM, S.OM)); + *this, Target.AST, Target.FM, S.AST, S.FM, S.OM, SharedState)); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits