@@ -200,8 +200,25 @@ ClangImporter::createClangArgs(const ClangImporterOptions &ClangImporterOpts,
200200 return clangDriverArgs;
201201}
202202
203+ namespace {
204+ class ClangInvocationFileMappingContextWithASTContext
205+ : public ClangInvocationFileMappingContext {
206+ const ASTContext &Ctx;
207+
208+ public:
209+ ClangInvocationFileMappingContextWithASTContext (const ASTContext &Ctx)
210+ : ClangInvocationFileMappingContext(Ctx.LangOpts, Ctx.SearchPathOpts,
211+ Ctx.ClangImporterOpts, Ctx.CASOpts, Ctx.Diags), Ctx(Ctx) {}
212+
213+ void *Allocate (unsigned long bytes, unsigned alignment) const override {
214+ return Ctx.Allocate (bytes, alignment);
215+ }
216+ };
217+ } // namespace
218+
203219static SmallVector<std::pair<std::string, std::string>, 2 >
204- getLibcFileMapping (const ASTContext &ctx, StringRef modulemapFileName,
220+ getLibcFileMapping (const ClangInvocationFileMappingContext &ctx,
221+ StringRef modulemapFileName,
205222 std::optional<ArrayRef<StringRef>> maybeHeaderFileNames,
206223 const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &vfs,
207224 bool suppressDiagnostic) {
@@ -267,7 +284,8 @@ getLibcFileMapping(const ASTContext &ctx, StringRef modulemapFileName,
267284}
268285
269286static void getLibStdCxxFileMapping (
270- ClangInvocationFileMapping &fileMapping, const ASTContext &ctx,
287+ ClangInvocationFileMapping &fileMapping,
288+ const ClangInvocationFileMappingContext &ctx,
271289 const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &vfs,
272290 bool suppressDiagnostic) {
273291 assert (ctx.LangOpts .EnableCXXInterop &&
@@ -472,7 +490,8 @@ GetPlatformAuxiliaryFile(StringRef Platform, StringRef File,
472490}
473491
474492void GetWindowsFileMappings (
475- ClangInvocationFileMapping &fileMapping, const ASTContext &Context,
493+ ClangInvocationFileMapping &fileMapping,
494+ const ClangInvocationFileMappingContext &Context,
476495 const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &driverVFS,
477496 bool &requiresBuiltinHeadersInSystemModules) {
478497 const llvm::Triple &Triple = Context.LangOpts .Target ;
@@ -612,7 +631,16 @@ void GetWindowsFileMappings(
612631} // namespace
613632
614633ClangInvocationFileMapping swift::getClangInvocationFileMapping (
615- const ASTContext &ctx, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> vfs,
634+ const ASTContext &ctx,
635+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> vfs,
636+ bool suppressDiagnostic) {
637+ ClangInvocationFileMappingContextWithASTContext Ctx (ctx);
638+ return getClangInvocationFileMapping (Ctx, vfs, suppressDiagnostic);
639+ }
640+
641+ ClangInvocationFileMapping swift::getClangInvocationFileMapping (
642+ const ClangInvocationFileMappingContext &ctx,
643+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> vfs,
616644 bool suppressDiagnostic) {
617645 ClangInvocationFileMapping result;
618646 if (!vfs)
@@ -683,10 +711,21 @@ ClangInvocationFileMapping swift::getClangInvocationFileMapping(
683711 return result;
684712}
685713
686- ClangInvocationFileMapping swift::applyClangInvocationMapping (const ASTContext &ctx,
687- llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> baseVFS,
688- llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &fileSystem,
689- bool suppressDiagnostics) {
714+ ClangInvocationFileMapping swift::applyClangInvocationMapping (
715+ const ASTContext &ctx,
716+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> baseVFS,
717+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &fileSystem,
718+ bool suppressDiagnostics) {
719+ ClangInvocationFileMappingContextWithASTContext Ctx (ctx);
720+ return applyClangInvocationMapping (Ctx, baseVFS, fileSystem,
721+ suppressDiagnostics);
722+ }
723+
724+ ClangInvocationFileMapping swift::applyClangInvocationMapping (
725+ const ClangInvocationFileMappingContext &ctx,
726+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> baseVFS,
727+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &fileSystem,
728+ bool suppressDiagnostics) {
690729 if (ctx.CASOpts .HasImmutableFileSystem )
691730 return ClangInvocationFileMapping ();
692731
0 commit comments