diff --git a/include/swift/AST/SearchPathOptions.h b/include/swift/AST/SearchPathOptions.h index 0122d13fba2cc..7cde0bc4c1521 100644 --- a/include/swift/AST/SearchPathOptions.h +++ b/include/swift/AST/SearchPathOptions.h @@ -499,7 +499,7 @@ class SearchPathOptions { bool SkipSDKImportPaths = false; /// Scanner Prefix Mapper. - std::vector ScannerPrefixMapper; + std::vector> ScannerPrefixMapper; /// Verify resolved plugin is not changed. bool ResolvedPluginVerification = false; diff --git a/lib/AST/ModuleDependencies.cpp b/lib/AST/ModuleDependencies.cpp index f0c4435820444..127db04b25349 100644 --- a/lib/AST/ModuleDependencies.cpp +++ b/lib/AST/ModuleDependencies.cpp @@ -755,12 +755,8 @@ bool SwiftDependencyScanningService::setupCachingDependencyScanningService( if (!ScannerPrefixMapper.empty()) { Mapper = std::make_unique(); SmallVector Prefixes; - if (auto E = llvm::MappedPrefix::transformJoined(ScannerPrefixMapper, - Prefixes)) { - Instance.getDiags().diagnose(SourceLoc(), diag::error_prefix_mapping, - toString(std::move(E))); - return true; - } + llvm::MappedPrefix::transformPairs(ScannerPrefixMapper, + Prefixes); Mapper->addRange(Prefixes); Mapper->sort(); } diff --git a/lib/ClangImporter/ClangModuleDependencyScanner.cpp b/lib/ClangImporter/ClangModuleDependencyScanner.cpp index 4e63580f3cce4..97396d6d05b12 100644 --- a/lib/ClangImporter/ClangModuleDependencyScanner.cpp +++ b/lib/ClangImporter/ClangModuleDependencyScanner.cpp @@ -40,8 +40,9 @@ using namespace clang::tooling::dependencies; static void addScannerPrefixMapperInvocationArguments( std::vector &invocationArgStrs, ASTContext &ctx) { for (const auto &arg : ctx.SearchPathOpts.ScannerPrefixMapper) { - std::string prefixMapArg = "-fdepscan-prefix-map=" + arg; - invocationArgStrs.push_back(prefixMapArg); + invocationArgStrs.push_back("-fdepscan-prefix-map"); + invocationArgStrs.push_back(arg.first); + invocationArgStrs.push_back(arg.second); } } diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 8726b222ee576..b1ee37ea2e10b 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -35,6 +35,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/Path.h" +#include "llvm/Support/PrefixMapper.h" #include "llvm/Support/Process.h" #include "llvm/Support/VersionTuple.h" #include "llvm/Support/WithColor.h" @@ -2473,7 +2474,11 @@ static bool ParseSearchPathArgs(SearchPathOptions &Opts, ArgList &Args, Opts.DeserializedPathRecoverer.addMapping(SplitMap.first, SplitMap.second); } for (StringRef Opt : Args.getAllArgValues(OPT_scanner_prefix_map)) { - Opts.ScannerPrefixMapper.push_back(Opt.str()); + if (auto Mapping = llvm::MappedPrefix::getFromJoined(Opt)) { + Opts.ScannerPrefixMapper.push_back({Mapping->Old, Mapping->New}); + } else { + Diags.diagnose(SourceLoc(), diag::error_prefix_mapping, Opt); + } } Opts.ResolvedPluginVerification |=