@@ -471,82 +471,9 @@ static bool isSafeToIgnoreCWD(const CowCompilerInvocation &CI) {
471471 // Check if the command line input uses relative paths.
472472 // It is not safe to ignore the current working directory if any of the
473473 // command line inputs use relative paths.
474- #define IF_RELATIVE_RETURN_FALSE (PATH ) \
475- do { \
476- if (!PATH.empty () && !llvm::sys::path::is_absolute (PATH)) \
477- return false ; \
478- } while (0 )
479-
480- #define IF_ANY_RELATIVE_RETURN_FALSE (PATHS ) \
481- do { \
482- if (llvm::any_of (PATHS, [](const auto &P) { \
483- return !P.empty () && !llvm::sys::path::is_absolute (P); \
484- })) \
485- return false ; \
486- } while (0 )
487-
488- // Header search paths.
489- const auto &HeaderSearchOpts = CI.getHeaderSearchOpts ();
490- IF_RELATIVE_RETURN_FALSE (HeaderSearchOpts.Sysroot );
491- for (auto &Entry : HeaderSearchOpts.UserEntries )
492- if (Entry.IgnoreSysRoot )
493- IF_RELATIVE_RETURN_FALSE (Entry.Path );
494- IF_RELATIVE_RETURN_FALSE (HeaderSearchOpts.ResourceDir );
495- IF_RELATIVE_RETURN_FALSE (HeaderSearchOpts.ModuleCachePath );
496- IF_RELATIVE_RETURN_FALSE (HeaderSearchOpts.ModuleUserBuildPath );
497- for (auto I = HeaderSearchOpts.PrebuiltModuleFiles .begin (),
498- E = HeaderSearchOpts.PrebuiltModuleFiles .end ();
499- I != E;) {
500- auto Current = I++;
501- IF_RELATIVE_RETURN_FALSE (Current->second );
502- }
503- IF_ANY_RELATIVE_RETURN_FALSE (HeaderSearchOpts.PrebuiltModulePaths );
504- IF_ANY_RELATIVE_RETURN_FALSE (HeaderSearchOpts.VFSOverlayFiles );
505-
506- // Preprocessor options.
507- const auto &PPOpts = CI.getPreprocessorOpts ();
508- IF_ANY_RELATIVE_RETURN_FALSE (PPOpts.MacroIncludes );
509- IF_ANY_RELATIVE_RETURN_FALSE (PPOpts.Includes );
510- IF_RELATIVE_RETURN_FALSE (PPOpts.ImplicitPCHInclude );
511-
512- // Frontend options.
513- const auto &FrontendOpts = CI.getFrontendOpts ();
514- for (const FrontendInputFile &Input : FrontendOpts.Inputs ) {
515- if (Input.isBuffer ())
516- continue ; // FIXME: Can this happen when parsing command-line?
517-
518- IF_RELATIVE_RETURN_FALSE (Input.getFile ());
519- }
520- IF_RELATIVE_RETURN_FALSE (FrontendOpts.CodeCompletionAt .FileName );
521- IF_ANY_RELATIVE_RETURN_FALSE (FrontendOpts.ModuleMapFiles );
522- IF_ANY_RELATIVE_RETURN_FALSE (FrontendOpts.ModuleFiles );
523- IF_ANY_RELATIVE_RETURN_FALSE (FrontendOpts.ModulesEmbedFiles );
524- IF_ANY_RELATIVE_RETURN_FALSE (FrontendOpts.ASTMergeFiles );
525- IF_RELATIVE_RETURN_FALSE (FrontendOpts.OverrideRecordLayoutsFile );
526- IF_RELATIVE_RETURN_FALSE (FrontendOpts.StatsFile );
527-
528- // Filesystem options.
529- const auto &FileSystemOpts = CI.getFileSystemOpts ();
530- IF_RELATIVE_RETURN_FALSE (FileSystemOpts.WorkingDir );
531-
532- // Codegen options.
533- const auto &CodeGenOpts = CI.getCodeGenOpts ();
534- IF_RELATIVE_RETURN_FALSE (CodeGenOpts.DebugCompilationDir );
535- IF_RELATIVE_RETURN_FALSE (CodeGenOpts.CoverageCompilationDir );
536-
537- // Sanitizer options.
538- IF_ANY_RELATIVE_RETURN_FALSE (CI.getLangOpts ().NoSanitizeFiles );
539-
540- // Coverage mappings.
541- IF_RELATIVE_RETURN_FALSE (CodeGenOpts.ProfileInstrumentUsePath );
542- IF_RELATIVE_RETURN_FALSE (CodeGenOpts.SampleProfileFile );
543- IF_RELATIVE_RETURN_FALSE (CodeGenOpts.ProfileRemappingFile );
544-
545- // Dependency output options.
546- for (auto &ExtraDep : CI.getDependencyOutputOpts ().ExtraDeps )
547- IF_RELATIVE_RETURN_FALSE (ExtraDep.first );
548-
549- return true ;
474+ return !CI.anyPath ([](StringRef Path) {
475+ return !Path.empty () && !llvm::sys::path::is_absolute (Path);
476+ });
550477}
551478
552479static std::string getModuleContextHash (const ModuleDeps &MD,
0 commit comments